Asp.NetMVCファイルのダウンロードの4つの方法とZIPファイルのダウンロードの1つの方法
前言:
ここ数日、サーバー側からファイルをダウンロードする機能を作り、自分のコードとネット上のコードをまとめました.サービス側でダウンロードすると、一般ブラウザは自動的にダウンロードのパスをデフォルト化し、一般的にはCディスクのダウンロードフォルダに保存されます.クライアントの固定フォルダにダウンロードしたいのですが、この機能は考えていませんので、後で時間があれば見てみましょう.
直接コードを言わないでください.
終了:
上のコードはすべて私の実际のテストを経て、完全に机能を実现することができて、みんなは安心して使って、あなた达の需要によってファイル名とファイルの経路を変えるだけでいいです
ここ数日、サーバー側からファイルをダウンロードする機能を作り、自分のコードとネット上のコードをまとめました.サービス側でダウンロードすると、一般ブラウザは自動的にダウンロードのパスをデフォルト化し、一般的にはCディスクのダウンロードフォルダに保存されます.クライアントの固定フォルダにダウンロードしたいのですが、この機能は考えていませんので、後で時間があれば見てみましょう.
直接コードを言わないでください.
///
///
///
///
public FileStreamResult Down()
{
string fileName = "aaa.xlsx";//
string filePath = Server.MapPath("~/DownFile/test.xlsx");//
return File(new FileStream(filePath, FileMode.Open), "text/plain",
fileName);
// :“text/plain” MIME
}
///
///
///
///
public FileResult Down1()
{
string filePath = Server.MapPath("~/DownFile/test.xlsx");//
return File(filePath, "text/plain", "welcome.xlsx"); //welcome.txt
}
///
///
///
public void Down2()
{
string fileName = "aaa.xlsx";//
string filePath = Server.MapPath("~/DownFile/test.xlsx");//
FileInfo fileinfo = new FileInfo(filePath);
Response.Clear(); //
Response.ClearContent(); //
Response.ClearHeaders(); //
Response.Buffer = true; // ,
Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
Response.AddHeader("Content-Length", fileinfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/unknow"; // HTTP MIME
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); // HTTP
Response.TransmitFile(filePath);
Response.End();
}
///
///
///
public void Down3()
{
string fileName = "aaa.xlsx";//
string filePath = Server.MapPath("~/DownFile/test.xlsx");//
System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath);
if (fileInfo.Exists == true)
{
const long ChunkSize = 102400;//100K , 100K,
byte[] buffer = new byte[ChunkSize];
Response.Clear();
System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
long dataLengthToRead = iStream.Length;//
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
}
}
// Zip
public void DownLoadZipFile()
{
string fileName = Request["fileName"];
string path = Server.MapPath("/ExportZip/" + fileName + ".zip");
//
long chunkSize = 204800;
// 200K
byte[] buffer = new byte[chunkSize];
//
long dataToRead = 0;
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/octet-stream";
string encodeFileName = Path.GetFileName(path);
if (Request.UserAgent.ToLower().IndexOf("msie") > -1)
encodeFileName = HttpUtility.UrlPathEncode(encodeFileName);
if (Request.UserAgent.ToLower().IndexOf("firefox") > -1)
encodeFileName = "\"" + encodeFileName + "\"";
else
encodeFileName = HttpUtility.UrlEncode(encodeFileName, System.Text.Encoding.UTF8);
try
{
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
dataToRead = stream.Length;
Response.AddHeader("Content-Disposition", "attachement;filename=" + encodeFileName);
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.AddHeader("Content-Length", dataToRead.ToString());
while (dataToRead > 0)
{
if (Response.IsClientConnected)
{
int length = stream.Read(buffer, 0, Convert.ToInt32(chunkSize));
Response.OutputStream.Write(buffer, 0, length);
Response.Flush();
buffer = new Byte[chunkSize];
dataToRead = dataToRead - length;
}
else
dataToRead = -1;
}
}
}
catch (Exception)
{
Response.Write("alert(' , ') ");
}
finally
{
//context.Response.Close();
}
}
終了:
上のコードはすべて私の実际のテストを経て、完全に机能を実现することができて、みんなは安心して使って、あなた达の需要によってファイル名とファイルの経路を変えるだけでいいです