ファイルのアップロードとダウンロードは、実際のプロジェクト開発プロセスで頻繁に使用する必要があるテクノロジです。この記事の主な内容は次のとおりです。
1. ファイルアップロードサイズ制限を解決する方法
2. サーバーにファイルとして保存
3. バイナリバイトストリームに変換してデータベースに保存し、ダウンロードする方法
4. インターネット上にリソースをアップロードする
パート 1:
まず、ASP.NET のファイル アップロード サイズ制限の問題を解決する方法について説明します。デフォルトでは、ASP.NET のファイル アップロード サイズ制限は 2M であることがわかっています。これは、WEB を変更することでカスタマイズできます。設定ファイルの最大ファイルサイズは次のとおりです。
<httpRuntimeexecutionTimeout="300" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>この方法では、アップロードされるファイルの最大値は 4M になりますが、ASP であるため、MaxRequestLength の値を無限に拡張することはできません。 NET では、すべてのファイルがメモリにロードされた後、処理されます。解決策は、暗黙的な HttpWorkerRequest を使用し、その GetPreloadedEntityBody メソッドと ReadEntityBody メソッドを使用して、ASP.NET 用の IIS によって作成されたパイプからデータをチャンク単位で読み取ることです。実装方法は以下の通りです。
IServiceProviderprovider=(IServiceProvider)HttpContext.Current;
HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
byte[]bs=wr.GetPreloadedEntityBody();
。
if(!wr.IsEntireEntityBodyIsPreloaded())
{
intn=1024;
バイト[]bs2=新しいバイト[n];
while(wr.ReadEntityBody(bs2,n)>0)
{
..
}
}これにより、大きなファイルのアップロードの問題が解決されます。
パート 2:
次に、クライアントからサーバーにファイルの形式でファイルをアップロードし、アップロードされたファイルに関するいくつかの基本情報を返す方法を紹介します。まず、アップロードされたファイルに関する情報 (返すときに必要) を格納するクラスを定義します。 。
パブリック クラス FileUpLoad
{
public FileUpLoad()
{
}
/**//// <概要>
/// アップロードファイル名
/// </概要>
パブリック文字列ファイル名
{
得る
{
ファイル名を返します;
}
セット
{
ファイル名 = 値;
}
}
プライベート文字列ファイル名
/**//// <概要>
/// アップロードファイルのパス
/// </概要>
パブリック文字列ファイルパス
{
得る
{
ファイルパスを返します。
}
セット
{
ファイルパス = 値;
}
}
プライベート文字列ファイルパス;
/**//// <概要>
/// ファイル拡張子
/// </概要>
パブリック文字列ファイル拡張子
{
得る
{
ファイル拡張子を返します。
}
セット
{
ファイル拡張子 = 値;
}
}
プライベート文字列ファイル拡張子;
}
さらに、構成ファイル (App.Config) でアップロードされるファイルの形式を制限することもできます。
<?xml バージョン="1.0" エンコーディング="gb2312" ?>
<用途>
<ファイルアップロード>
<フォーマット>.jpg|.gif|.png|.bmp</フォーマット>
</ファイルアップロード>
</アプリケーション>
このようにして、次のようにファイルをアップロードするメソッドの記述を開始できます。
public FileUpLoad UpLoadFile(HtmlInputFile InputFile,string ファイルパス,string myfileName, bool isRandom)
{
FileUpLoad fp = new FileUpLoad()
;
文字列保存名;
//
//アップロードオブジェクトを作成する
//
HttpPostedFilepostedFile = 入力ファイル.PostedFile;
ファイル名 = System.IO.Path.GetFileName(postedFile.FileName);
fileExtension = System.IO.Path.GetExtension(ファイル名);
//
// タイプに基づいてファイル形式を決定します
//
AppConfig app = new AppConfig();
文字列形式 = app.GetPath("FileUpLoad/Format");
//
//形式が一致しない場合はリターン
//
if(format.IndexOf(ファイル拡張子)==-1)
{
throw new ApplicationException("アップロードされたデータ形式が不正です");
}
//
//日付と乱数に基づいてランダムなファイル名を生成します
//
if(myfileName != string.Empty)
{
ファイル名 = 私のファイル名;
if
(ランダム)
{
ランダム objRand = new Random();
System.DateTime 日付 = DateTime.Now;
//ランダムなファイル名を生成
saveName = date. Year.ToString() + date.Month.ToString() + date.Day.ToString() + date.Hour.ToString() + date.Minute.ToString()
+ date.Second.ToString() + Convert.ToString(objRand.Next(99)*97 + 100);
ファイル名 = 保存名 + ファイル拡張子;
}
文字列 phyPath = HttpContext.Current.Request.MapPath(filePath);
//パスが存在するかどうかを判断し、存在しない場合はパスを作成します
DirectoryInfo upDir = 新しい DirectoryInfo(phyPath);
if(!upDir.Exists)
{
upDir.Create();
}
//
//ファイルを保存
//
試す
{
postedFile.SaveAs(phyPath + ファイル名);
fp.FilePath = ファイルパス + ファイル名;
fp.FileExtension = ファイル拡張子;
fp.ファイル名 = ファイル名;
}
キャッチ
{
throw new ApplicationException("アップロードに失敗しました!");
}
//アップロードしたファイルの情報を返す
fpを返します。
}
その後、ファイルをアップロードするときにこのメソッドを呼び出し、返されたファイル情報をデータベースに保存します。ダウンロードに関しては、パスを直接開くだけでOKです。
パート 3:
ここでは主に、バイナリ形式でファイルをアップロードおよびダウンロードする方法について説明します。まず、アップロード方法について説明します。
public byte[] UpLoadFile(HtmlInputFile f_IFile)
{
//クライアントが指定したアップロードされたファイルへのアクセスを取得します
HttpPostedFile upFile=f_IFile.PostedFile;
//アップロードされたファイルの長さを取得する
int upFileLength=upFile.ContentLength;
//アップロードされたファイルのクライアント MIME タイプを取得します
文字列 contentType = upFile.ContentType;
byte[] FileArray=new Byte[upFileLength];
ストリーム fileStream=upFile.InputStream;
fileStream.Read(FileArray,0,upFileLength);
このメソッドは、アップロードされたファイルのバイナリ バイト ストリームを返し、データベースに保存できるようにします。この形式のダウンロードについて説明します。この方法でのダウンロードは、新しい aspx ページを作成し、その Page_Load() イベントでバイナリ バイト ストリームを取り出して、それを読み出すことだと思うかもしれません。実際のアプリケーションでは、特定のサイトを開くことができないエラーが発生する可能性があります。私は通常、次の方法を使用します。
まず、Web.config に以下を追加します。
<addverb="*" path="openfile.aspx" type="RuixinOA.Web.BaseClass.OpenFile, RuixinOA.Web"/>
これは、openfile.aspx ページを開くと、システムが RuixinOA.Web.BaseClass.OpenFile クラスのメソッドを自動的に実行することを意味します。具体的な実装は次のとおりです。
システムを使用する;
System.Data を使用します。
System.Web を使用します。
System.IO を使用します。
Ruixin.WorkFlowDB を使用します。
RXSuite.Base を使用します。
usingRXSuite.Component;
名前空間
を使用します。
{
/**//// <概要>
/// NetUFile の概要説明。
/// </概要>
パブリック クラス OpenFile : IHttpHandler
{
public void ProcessRequest(HttpContext コンテキスト)
{
//ダウンロードするファイル情報をデータベースから取得する
RuixinOA.BusinessFacade.RX_OA_FileManager os = 新しい RX_OA_FileManager();
EntityData data = os.GetFileDetail(id);
if(data != null && data.Tables["RX_OA_File"].Rows.Count > 0)
{
DataRow dr = (DataRow)data.Tables["RX_OA_File"].Rows[0];
context.Response.Buffer = true;
context.Response.Clear();
context.Response.ContentType = dr["CContentType"].ToString();
context.Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString()));
context.Response.BinaryWrite((Byte[])dr["CContent"]);
context.Response.Flush();
context.Response.End();
}
public
bool IsReusable
{
取得 { true を返す;}
}
}
メソッド
を実行すると、システムはユーザーに直接開くかダウンロードするかを選択するよう求めます。この部分はここまでです。
パート 4:
このパートでは主に、インターネット上のリソースをサーバーにアップロードする方法について説明します。使い方については以前の記事で詳しく解説しているので、ここでは詳しく説明しません。
参照してください: 動的ページをバイナリ バイト ストリームに変換する
パート 5: 概要
今日は実際のプロジェクト開発でよく使われるファイルのアップロードとダウンロードの方法をいくつか紹介します。不完全な点もあるかもしれませんが、皆さんのプロジェクト開発の経験を共有できれば幸いです。書き方が悪い場合は修正してください、ありがとう!