1

組織内でのみアクセスできる Web サイトを開発しています。

(Visio File *.vsd)クライアントがサーバーからファイルをダウンロードして任意の場所に保存する機能を実装したいと考えています。

私は解決策に出くわしました:

dim wc as new WebClient ()

wc.downloadFile(src,dest)

ただし、このソリューションでは、[名前を付けて保存] ダイアログ ボックスが表示されません (アプリケーションに必要です)。また、パスをデータベースに保存できるように、クライアントの PC でファイルを保存したパスも知っておく必要があります。

(参考: VSSと同様の機能を実装したい。)

4

1 に答える 1

5

ASP.NETで、ファイルをクライアントにストリーミングし、[名前を付けて保存]ダイアログでユーザーに場所の選択を求める場合は、正しいContent-TypeおよびContent-Disposition応答ヘッダーを設定してから、ファイルをに直接書き込む必要があります。応答ストリーム:

例えば:

protected void SomeButton_Click(object sender, EventArgs e)
{
    // TODO: adjust the path to the file on the server that you want to download
    var fileToDownload = Server.MapPath("~/App_Data/someFile.pdf");

    Response.ContentType = "application/octet-stream";
    var cd = new ContentDisposition();
    cd.Inline = false;
    cd.FileName = Path.GetFileName(fileToDownload);
    Response.AppendHeader("Content-Disposition", cd.ToString());

    byte[] fileData = System.IO.File.ReadAllBytes(fileToDownload);
    Response.OutputStream.Write(fileData, 0, fileData.Length);
}

このコードが実行されると、ファイルはクライアントブラウザーに送信され、コンピューターの特定の場所に保存するように求められます。

残念ながら、セキュリティ上の理由から、クライアントが自分のコンピュータにファイルを保存することを選択したディレクトリをキャプチャする方法はありません。この情報はネットワークを介して転送されることはなく、ASP.NETアプリケーション内でそれを知る方法はありません。したがって、この情報を取得する他の方法を見つける必要があります。たとえば、クライアントにテキストボックスや他のフィールドに入力するように依頼するなどです。

于 2012-12-24T10:52:53.543 に答える