通常10M如下的文件上傳經過設置Web.Config,再用VS自帶的FileUpload控件就能夠了,可是若是要上傳100M甚至1G的文件就不能這樣上傳了。我這裏分享一下我本身開發的一套大文件上傳控件供你們參考。
工程截圖
數據庫
文件塊處理代碼瀏覽器
https://blog.csdn.net/alisky119/article/details/91491383asp.net
using Newtonsoft.Json;post
using Newtonsoft.Json.Linq;優化
using System;ui
using System.Web;this
using up6.db.biz;spa
using up6.db.utils;.net
namespace up6.db3d
{
public partial class f_post : System.Web.UI.Page
{
bool safe_check(params string[] ps)
{
foreach (var v in ps)
{
System.Diagnostics.Debug.Write("參數值:");
System.Diagnostics.Debug.WriteLine(v);
if (string.IsNullOrEmpty(v)) return false;
}
foreach (string key in Request.Headers.Keys)
{
var vs = Request.Headers.GetValues(key);
//XDebug.Output(key + " "+String.Join(",", vs));
}
return true;
}
/// <summary>
/// 只負責拼接文件塊。將接收的文件塊數據寫入到文件中。
/// 更新記錄:
/// 2012-04-12 更新文件大小變量類型,增長對2G以上文件的支持。
/// 2012-04-18 取消更新文件上傳進度信息邏輯。
/// 2012-10-30 增長更新文件進度功能。
/// 2015-03-19 文件路徑由客戶端提供,此頁面再也不查詢文件在服務端的路徑。減小一次數據庫訪問操做。
/// 2016-03-31 增長文件夾信息字段
/// 2017-07-11 優化參數檢查邏輯
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
string uid = Request.Headers["uid"];
string f_id = Request.Headers["id"];
string lenSvr = Request.Headers["lenSvr"];//已傳大小
string lenLoc = Request.Headers["lenLoc"];//本地文件大小
string blockOffset = Request.Headers["blockOffset"];
string blockSize = Request.Headers["blockSize"];//當前塊大小
string blockIndex = Request.Headers["blockIndex"];//當前塊索引,基於1
string blockMd5 = Request.Headers["blockMd5"];//塊MD5
string complete = Request.Headers["complete"];//true/false
string pathSvr = Request.Form["pathSvr"];//
pathSvr = HttpUtility.UrlDecode(pathSvr);
if( !this.safe_check(lenLoc,uid,f_id,blockOffset,pathSvr)) return;
//有文件塊數據
if (Request.Files.Count > 0)
{
bool verify = false;
string msg = string.Empty;
string md5Svr = string.Empty;
HttpPostedFile file = Request.Files.Get(0);//文件塊
//計算文件塊MD5
if (!string.IsNullOrEmpty(blockMd5))
{
md5Svr = Md5Tool.calc(file.InputStream);
}
//文件塊大小驗證
verify = int.Parse(blockSize) == file.InputStream.Length;
if (!verify)
{
msg = "block size error sizeSvr:"+file.InputStream.Length + " sizeLoc:"+blockSize;
}
//塊MD5驗證
if ( verify && !string.IsNullOrEmpty(blockMd5) )
{
verify = md5Svr == blockMd5;
if(!verify) msg = "block md5 error";
}
if (verify)
{
//2.0保存文件塊數據
FileBlockWriter res = new FileBlockWriter();
res.make(pathSvr, Convert.ToInt64(lenLoc));
res.write(pathSvr, Convert.ToInt64(blockOffset), ref file);
up6_biz_event.file_post_block(f_id,Convert.ToInt32(blockIndex));
//生成信息
JObject o = new JObject();
o["msg"] = "ok";
o["md5"] = md5Svr;//文件塊MD5
o["offset"] = blockOffset;//偏移
msg = JsonConvert.SerializeObject(o);
}
Response.Write(msg);
}
}
}
}
功能介紹
樹形目錄導航。您能夠經過樹型目錄導航和路徑導航欄快速跳轉到指定目錄。在跳轉後樹型目錄將會自動選中當前的目錄。
路徑導航,點擊根目錄按鈕即可返根目錄
文件和目錄重命名
點擊刪除按鈕
點擊肯定後,頁面中的文件消失
批量上傳文件
粘貼上傳
複製文件夾、文件或圖片
在頁面中選擇好相應的上傳目錄,點擊粘貼上傳按鈕,數據便可快速開始上傳
批量上傳文件和文件夾
文件和目錄下載
批量下載
同時選擇多個須要下載的文件
而後點擊下載按鈕,設置下載目錄文件夾
點擊所有下載,開始下載
自動加載未上傳完的任務。在刷新瀏覽器或重啓電腦後仍然能夠自動加載未完成的任務。
下載完成後打開咱們設置的下載目錄文件夾,發現需下載的文件或文件夾確認已下載成功,經確認文件夾內的內容與下載文件夾內容一致
數據庫記錄
控件包下載:
cab(x86):http://t.cn/Ai9pmG8S
cab(x64):http://t.cn/Ai9pm04B
示例下載:
asp.net:http://t.cn/Ai9pue4A
在線教程:
asp.net-文件管理器教程:http://j.mp/2MLoQWf