2012-01-09 16 views
0

次のコードを使用してファイルを開きます。ファイルを開く/保存するプロンプトが表示されたら、ファイルがローカルホストからのものであることが示されましたが、ファイルがネットワークドライブに存在する可能性があります。ローカルホストを実際の場所に置き換える方法はありますか?localhostを実際のパスに置き換える方法は?

byte[] bts = System.IO.File.ReadAllBytes(fileName); 
      Response.Clear(); 
      Response.ClearHeaders(); 
      Response.AddHeader("Content-Type", "Application/octect-stream"); 
      Response.AddHeader("Content-Length", bts.Length.ToString()); 
      Response.AddHeader("Content-Disposition", "attachment; filename=" + ((LinkButton)sender).Text); 
      Response.BinaryWrite(bts); 
      Response.Flush(); 
      Response.End();   

編集:((LinkBut​​ton)送信者).Text)はパスのないファイル名です。ファイルの実際の場所は、たとえばY:\ SPR_Uploadで、YはC $(\ m6300-7)にマップされたネットワークドライブです。ファイルをクリックすると、ローカルホストからXXX(24.1KB)を開いたり保存したりしますか?というメッセージが表示されました。 localhostをm6300-7に置き換えたい。それ、どうやったら出来るの?

答えて

1

問題は、ファイル名を取得するために

((LinkButton)sender).Text 

を使用していることであるように思われます。これを呼び出すLinkBut​​tonにText値にハードコードされたlocalhostがある場合は、そこで修正する必要があります。

LinkBut​​tonのTextプロパティをhttp://localhost:0000/....のようにハードコードしている場合は、それを修正する必要があります。ほとんど例外がない場合、アプリケーション内のすべてのリンクは、たとえば/home/indexまたは/support/default.aspxのように相対的でなければなりません。

Content-Dispositionヘッダーは、ブラウザが使用またはユーザに提示するファイル名を設定するだけです。何にでも設定でき、サーバ上の実際のファイルを参照する必要はありません。このように

、あなただけ(など、すべてのパス情報をストリッピング)ファイル名をしたい場合、あなたは、あなたのContent-Dispositionヘッダーの割り当てでは、結果の値を使用し

var fileName = System.IO.Path.GetFileName(((LinkButton)Sender).Text); 

を使用することができます。

更新

ブラウザは「あなたがローカルホストからxxxx.xxダウンロードしますか?」と言うとき、それはファイルをダウンロードするために使用されているURLからサーバー名(この場合はlocalhost)を取得します。 「www.mysite.com」で同じアプリを実行すると、ブラウザに「www.mysite.comからxxxx.xxをダウンロードしますか?」というメッセージが表示されます。セキュリティ上の理由などで、そのプロンプトで使用されているサーバーの名前を上書きすることはできません。

Content-Dispositionヘッダーは、ブラウザがユーザーを表示するファイル名を設定するだけです。

+0

私の不明な点は申し訳ありません。私の新しい編集を見てください。 – GLP

+0

@ GaolaiPeng Answer updated –

+0

ありがとうございました。私はその考えを得た。あなたはそれを変更することは許されていないと思います。 – GLP

関連する問題