ファイルをアップロードしてサイズを判断するときに注意すべき点
以前、アップロードファイルを書くときにファイルのサイズを判断するには、次のようなコードが使用されていました.
このようにすると、ファイルが大きいと判断されると一定の誤差があります.このlengthにはファイル以外のデータも含まれていますが、基本的な誤差は許容範囲内です.このような利点は、ファイルが本当にサーバにアップロードされてからサイズ判断を行うことを直接避けることです.
このような原理は、IISが要求データを処理する際に、上から順に実行する、Requestである.HeadersはRequestと実行するFormは関係ない、つまりRequestを実行した.HeadersはIISがコミットしたデータを処理することはありません
ついでに、ファイルタイプの判断ルールを補足します.
指定ファイル名としてダウンロード
if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0 && Request.Files[0].ContentLength <= maxPictureSize)
{}
最近になって、IISはすべてのブラウザから送信されたデータ(Request.FormまたはRequest.BinaryReadがIIS処理要求データをもたらす)を処理したことを知った.つまり、ファイルがサーバに受信された場合、ファイルサイズが事後判断に属していると判断し、正しい判断は以下の通りである.long fileLength = long.Parse(Request.Headers["Content-Length"]);
if(fileLength<maxPictureSize && Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
{}
このようにすると、ファイルが大きいと判断されると一定の誤差があります.このlengthにはファイル以外のデータも含まれていますが、基本的な誤差は許容範囲内です.このような利点は、ファイルが本当にサーバにアップロードされてからサイズ判断を行うことを直接避けることです.
このような原理は、IISが要求データを処理する際に、上から順に実行する、Requestである.HeadersはRequestと実行するFormは関係ない、つまりRequestを実行した.HeadersはIISがコミットしたデータを処理することはありません
ついでに、ファイルタイプの判断ルールを補足します.
// Request.Files[0].ContentType ,
// , jpg, ContentType "image/jpeg" "image/pjpeg"
// jpg ,
//byte[] bytes = new byte[2];
// bytes
// string.Format("{0}{1}",bytes[0],bytes[1]);
//255216 jpg;7173 gif;6677 BMP,13780 PNG;7790 exe,8297 rar
指定ファイル名としてダウンロード
string fileName = "test.xls";
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "gb2312";
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);