ファイルの一時ダウンロードアドレスを一定期間生成する方法を知りたいのですが、私はそれがベストプラクティスではないと知っているでしょう。おそらくHttpHandlersを使うのはhttp://www.devx.com/codemag/Article/34535/1954です。
しかし、私はGUIDやその他の秘密の命名法を使ってファイル名を生成するためにurlrewritingをどのように使うことができるのか不思議です。限られた時間利用可能です。
誰かが私にそれに関する良い記事を指摘していただければ幸いです。一時ファイルダウンロードリンク
答えて
まあまずあなたが識別子のいくつかのフォームを必要とします。あなたはGUIDを提案し、それは簡単に実行されます。Guid.NewGuid().ToString("n")
はあなたにそのような識別子を与えます。
あなたはURIの書き換えを話しますが、それは本当にちょっとした磨きです。 /myFiles/a948ec43e5b743548fd9a77c462b953e
を/myFiles/download.aspx?id=a948ec43e5b743548fd9a77c462b953e
に変更するか、(ルックアップテーブルを確認した後で)myFiles/download.aspx?id=3
またはmyFiles/download.aspx?fileName=myNewDownload.pdf
に書き換えることもできます。これは他のURI書き換えタスクと同じなので、ここでは無視し、/myFiles/download.aspx?id=a948ec43e5b743548fd9a77c462b953e
に書き換え要求があるかどうかを確認します。
大丈夫です。識別子があります。ストリーム、コンテンツタイプ、有効期限の3つに一致させる必要があります。
このすべてをファイルシステムに格納することもできますし、すべてをデータベースに格納することも、ストリームがファイルシステム内のファイルとして格納されるパスを含むデータベース内の詳細を格納することもできます。
のような名前のファイル・システムに格納それを言うことができます:
a948ec43e5b743548fd9a77c462b953e.application_pdfとa5d360178ec14e97abd556ed4b7709cf.text_plain、私たちは、通常のWindowsファイル拡張子を使用していないのcharset = UTF-8
注意アップロードマシンがあなたのサーバーと異なるバインディングを持っている場合にもうまく対処します。
a948ec43e5b743548fd9a77c462b953eが必要なアイテムの場合、作成日を最初に見てください。ファイルが期限切れになっている場合(ファイルの有効期限が切れている場合)、ファイルが期限切れであることを示すエラーメッセージと共に410GONEヘッダーを送信しますこの時点でファイルを削除して使用をクリーンアップすることもできますし、おそらくファイルを削除してファイルが存在していたが、0バイトの記憶領域になるようにすることもできます。
それ以外の場合は、Response.ContentType
を "application/pdf"に設定してからResponse.TransmitFile
に設定して送信します。
ストリームをファイルとは別の方法で保存した場合は、小さな塊(4096はシステムの他の部分の他のバッファとよく一致します)に送信し、メモリの問題を防ぐために大規模な電話Response.Flush()
を定期的に呼び出してください。
これは基本的なシステムです。細心の注意を払うのは、元のファイル名を格納してそれをコンテンツ処理ヘッダーに送信し、Range要求に従うことで、ユーザーは最初から開始する必要はなく、失敗したダウンロードを再開できます。
これは、正しい人だけがファイルを持っていることを保証するために使用されるあらゆる認証とはかなり直交しています。どのような種類のログインシステムと一緒に使用してもかまいません。
それは完全で徹底的な答えでした。ありがとうございました – Kamyar
使用しているASP.NETフレームワークに関係なく、ファイルID(私が所有しているもの)とサーバー側で復号化してタイムスタンプに対して検証できるDateTimeを暗号化する暗号化トークンが好きです。ここで
は単純な実装です:
public static string GetDownloadToken(int fileId)
{
byte[] idbytes = BitConverter.GetBytes(fileId); // 4 bytes
byte[] dateTimeBytes = BitConverter.GetBytes(DateTime.Now.ToBinary()); // 8 bytes
byte[] buffer = new byte[16]; // minimum for an encryption block
string password = "password";
byte[] passwordBytes = Encoding.ASCII.GetBytes(password);
Array.Copy(idbytes, 0, buffer, 0, idbytes.Length);
Array.Copy(dateTimeBytes, 0, buffer, idbytes.Length, dateTimeBytes.Length);
byte[] encryptedBuffer = new byte[256];
using (SHA1CryptoServiceProvider sha1 = new SHA1CryptoServiceProvider())
{
int count = sha1.TransformBlock(buffer, 0, buffer.Length, encryptedBuffer, 0);
return Convert.ToBase64String(encryptedBuffer, 0, count);
}
}
- 1. 角度付きファイルダウンロードリンク
- 2. phpMyAdminでのBINARYカラムのファイルダウンロードリンクを無効にする> 4.3.0
- 3. 一時
- 4. HSQLDB一時キャッシュテーブル
- 5. 一時ASP.NETファイル
- 6. XMLPad一時ファイル
- 7. 一時Webview Android
- 8. エンティティフレームワークと一時オブジェクト
- 9. 一時的なデータソース
- 10. 一時ファイルとガベージコレクション
- 11. 一時ファイル生成
- 12. ストアフォームフィールドデータ一時的に
- 13. 一時チケット予約
- 14. 一時的なコピーコンストラクタ
- 15. Androidの一時ファイル
- 16. コアデータと一時プロパティー
- 17. NSManagedObjectの一時インスタンス
- 18. 一時停止ボタン
- 19. エクセルVBA - 一時テーブル
- 20. 一時的な一時参照の参照
- 21. 日時がある一時的な
- 22. Jqueryスライドショースクリプト、クリック時の一時停止
- 23. Chrome Javascriptデバッガ(一時停止時)
- 24. 一時停止時のオーディオキューバッファ操作
- 25. 一時テーブルとSQL SELECTパフォーマンス
- 26. SharePointの一時フォルダ/場所
- 27. Sybaseの一時テーブルとインデックス
- 28. 一時テーブルpostgresql関数
- 29. SQL文の一時変数
- 30. 一時停止Bashループ
あなたはASP.NET MVCを使用していますか? – Aliostad
私はWebformsを使用します。 – Kamyar
この場合、URL書き換えを使用して得られるものは?なぜguidはクエリ文字列内にないのですか? –