Asp.Netのアップロードおよびダウンロードファイル

http://www.cnblogs.com/zcttxs/archive/2012/05/21/2511947.html

http://www.cnblogs.com/flashlm/archive/2009/07/25/file_stream_write_method.html

aspxページ:

コードをコピー
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="上传和下载文件.aspx.cs" Inherits="上传和下载文件" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:FileUpload ID="homeworkFile" runat="server" />
    <asp:Button ID="btnAdd" runat="server" Text="上传"  OnClick="btnAdd_Click"/></br>
    <asp:Button ID="btndownfile" runat="server" Text="下载方法一:TransmitFile" 
        onclick="btndownfile_Click" /></br>
       <asp:Button ID="btndownfilebyWriteFile" runat="server" 
        Text="下载方法二:WriteFile" onclick="btndownfilebyWriteFile_Click" /></br>
        <asp:Button ID="btndownfilebyWriteFile2" runat="server" 
        Text="下载方法三:WriteFile分块" onclick="btndownfilebyWriteFile2_Click" /><br />
        <asp:Button ID="btndownfilebystream" runat="server" Text="下载方法四:流方式下载" 
        onclick="btndownfilebystream_Click" />
    </form>
</body>
</html>
コードをコピー

背後のaspxコード:

コードの表示

Web構成ファイル:

<のappSettings>
     < -アップロードされたファイルへのパス- !>
    <キー= "ResoursePath"値を追加= "D:\ IbeaconShow \ BJNetwork" />
    <キー= "RESHomeworkContentPath"値を追加します。= "\ DATA" />
    <! -ファイルのサイズをアップロードするには- >
    <追加キー= "FileUploadMaxSize"値= "20M" />
    <! -タイプをアップロードすることができる- >
    <キー= "のFileType"値=「ZIP、.TXTを追加します。 、.DOC、.RAR、* .XLS、.RTF、.xlsxの、.docxの、.PNG「/>
  </のappSettings>

 <のsystem.web>
     <! - -デフォルトのasp.netのアップロードファイルのサイズ変更>
    <のhttpRuntime executionTimeout = "300" maxRequestLength = "409600" useFullyQualifiedRedirectUrl = "偽" />を

 </system.web>

 

IISアップロードサイズの変更

1、最初のIISサービスプロセスに行くには、あなたがよ~~~変更するものではありません、ファイル内の他、そのInetinfo.exeプロセスを閉鎖、または
    窓/ system32に/ inesrv /メタベース:2、システムディレクトリに見つかりました.xmlの204800「この1「ファイル、彼を見つけるために、テキストエディタを開いて、私はAspMaxRequestEntityAllowed =を見つけるために、EditPuls(この男はフォントの色で、良いですが)、Ctrlキー+ Fを使用していた」、これは、ファイルのアップロード、IISのデフォルトサイズですデフォルトでは、あなたがそれを必要とするサイズに変更し、200キロバイトであること、204800Byteです!

 

マルチスレッドHTTPダウンロード用のパフォーマンスへの影響、大規模ファイルのサポート、およびサポート:さまざまな方法をダウンロードするASP.NETファイルの比較

ファイルをダウンロードするには、クライアントを達成するためのクライアント・ファイル・ストリームにサーバーを書くことから、さまざまな方法を提供するasp.net。より多くの有用な抗ダウンロードシステムをやってこれが技術。
いくつかの主要な技術があります:WriteFile関数、およびTransmitFileのBinaryWrite
WriteFiletとのBinaryWriteが早く現れ、出力ファイルストリームには、役割を開始しますが、メモリ書き込み後読み取り、そのためクライアントにファイル全体を下ることになっていることができます多くを取るだろうメモリリソースを使用すると、ファイルが大きいダウンロードしたいとき、特に、asp.netは、アプリケーションの安定動作に影響を与えます。
TransmitFileは、強力な、大きなファイルのサポートも良いですよりも安定のBinaryWriteのWriteFileの不足を補うための方法であり、唯一登場し、WriteFile関数のBinaryWrite。しかし、それはまた、欠点を持っていないだろうHTTPのサポート大容量のファイルを1回のダウンロードではない場合は、完了すると、その後、我々は再びすべてやり直す必要があります。

だから、パフォーマンス、大容量ファイルのダウンロードをサポートし、HTTPのサポート、さらにはマルチスレッドのダウンロードには小さな影響は、まだ自分自身を記述する必要があります。実際には、ファイル全体をメモリに読み込まれた後、さらにクライアントの書き込みの後、我々は彼の出力、道を制御することができるためのBinaryWriteとWriteFile関数は、パフォーマンスに影響を与えるだろう理由コンテンツの一部は、メモリ読み取り専用にし、上でこれらを書くために、クライアントに下りますあなたは、詳細をカスタマイズしてダウンロードすることができます。以下は、あなたの参考のために比較的良好なダウンロード機能を提供します。

 

コードをコピー
  1 / ** /   2 /// <まとめ>   3 ///  ダウンロードファイル、大きなファイルのサポート、履歴書、制限速度。受け入れ-範囲レスポンスヘッダが再開、ETagのをサポートし、リクエストヘッダの範囲。  4 ///  のAccept-範囲をクライアントに示すために、応答ヘッダを、このプロセスは、ダウンロード履歴書はバックグラウンドインテリジェント転送サービス(BITS)を実現サポートし、:.バイトであり、  5 ///  のETag:顧客のレスポンスヘッダ最初のエンド(200)応答では、クライアントからの再開要求、  6 ///は 、彼らがしていることを確認するためにクライアントソフトウェアを許可するファイルごとに一意のETagの値を(ファイル名とファイルによって最終更新日時の組成物であった)、提供しなければなりませんバイトブロックが最新ではまだですダウンロードしました。  7 ///  範囲:再開開始位置、即ち、バイト数は、値として、クライアントにダウンロードされている:バイト= 1474560-。  8 ///  さらに:変換スペースがファイル名に符号化URLENCODEは+が、ブラウザが理解されていないプラススペース(%2Bに変換)されますので、ブラウザは、上のファイル・スペースをダウンロードプラス記号に、  9 ///  溶液:URLENCODE後、「+」ブラウザはスペースに変換20%であろうため、「20%」に置き換え 10 ///         
          
        
        
        
        
        
        
        
         </要約>  11 /// <PARAM NAME = "のHttpContext"> 現在の要求のHttpContext </ PARAM>  12である/// <PARAM NAME = "filePathに"> パス、ファイル名を含むダウンロードファイルの物理パス、</ PARAM >  13である/// <PARAM NAME =「スピード」> ダウンロード速度:1秒当たりのバイト数、ダウンロード</ param>の 14 /// <戻り値> ダウンロードに失敗したという誤った真のダウンロードの成功に、> </戻り値
         
         
         
         

 15 のパブリック静的BOOLを DownloadFile(のHttpContextのHttpContext、  文字列 filePathに、  ロング スピード) 16 {  17。            httpContext.Response.Clear(); 18 BOOL  右  =             
        

             trueに
 19 試みる 20は{  21は-確認:HTTPMETHOD、要求されたファイルが#region存在するかどうかを 37 [  38は、ローカル変数の定義は、ローカル変数は#region定義 51である 52れる-を確認:ファイルが大きすぎると、再開、および最後か日付を介して要求した後に変更されている 69  70 試みる 71は{  72 -------有意な応答ヘッダ、ヘッダ解決要求、相関検証追加109 110 クライアントに-------送信データブロック- ----------------- 120                 } 121 キャッチ122 { 123                     RET  = falseに; 124                 } 125 、最終的に126 { 127            
            
                

                

                

                
                
                    

                    

                
                
 

                
                
                    br.Close();
128                     myFile.Close()。
129                 }
130             }
131キャッチ132 { 133                 RET  = 134             } 135リターン RET。136        }
            
            
 

            
137
コードをコピー

 

ます。https://my.oschina.net/garyun/blog/602728で再現

おすすめ

転載: blog.csdn.net/weixin_34121282/article/details/91774694