ASP.NETで、ファイルダウンロードについて

タグの編集
投稿者 kojiro_i619  (社会人) 投稿日時 2014/11/17 16:51:57
次々の質問、失礼します。
ユーザー側が、pdfファイルをダウンロードする機能はあるのでしょうか?
一応、本を調べましたが、記載がありませんでした。
投稿者 るきお  (社会人) 投稿日時 2014/11/18 12:51:18
一番簡単な方法は、そのpdfファイルのURLのリンクを貼ることです。
<a href="http://xxxx/xxxx/xxxx.pdf">PDFダウンロードはこちらから</a>


pdfのURLを利用すれば、画面遷移させることもできますしお手軽です。

pdf自体にURLがないか、ダウンロードのタイミング上URLを利用した仕組みが無理な場合は、HttpResponseを使って直接HTTPレスポンスを書き込みます。
一例を紹介します。
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Disposition""attachment; filename=test.pdf")
Response.Flush()
Response.TransmitFile("C:\test\xxxx.pdf)
Response.End()

ただ、このように自分で制御するにはContentTypeやContent-Dispositionの設定などにブラウザやOSごとの癖があるので、なかなか面倒です。

リンク等を利用する上に書く方法の方がおすすめです。
投稿者 kojiro_i619  (社会人) 投稿日時 2014/11/18 15:20:43
ありがとうございます。
http://msdn.microsoft.com/ja-jp/library/cc719227.aspx
を参考にし、同じかもしれませんが、
Dim strFile As String = "XX.doc"
Response.ContentType = "application/octet-stream"
Response.AddHeader("Content-Disposition", "attachment; filename=" + strFile)
esponse.Flush()
Response.WriteFile(strFile)
Response.End()
でうまくいきました。
この場合は、*.aspxと同じ場所にダウンロード対象ファイルを収めている時です。
ただ、例えばtestといったフォルダを作成し、その中に、ダウンロード対象ファイルを収めている場合の記述の仕方が不明です。
投稿者 るきお  (社会人) 投稿日時 2014/11/19 13:11:29
サーバー側のフルパスを指定すればよいのです。
ただ、前にも書きましたが私はURLに遷移する方法の方をお勧めします。
投稿者 kojiro_i619  (社会人) 投稿日時 2014/11/20 08:44:36
以下、
Response.ContentType = "application/octet-stream"
Dim filen As String = "test/" & strFile
Response.AddHeader("Content-Disposition", "attachment; filename=" + filen)
Response.Flush()
Response.WriteFile(strFile)
では、ファイル 'c:\users\082777\documents\visual studio 2012\Projects\test2\test2\phas_manual_ver300.doc' が見つかりませんでした。
です。
投稿者 kojiro_i619  (社会人) 投稿日時 2014/11/20 08:48:46
Response.WriteFile(filen)
に訂正すると、ダウンロードできるのですが、ファイル名が異なり、
test_phas_manual_ver300
のファイル名になります。