asp.net上傳整個文件夾

通常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);

            }

        }

    }

}

 

 

功能介紹

樹形目錄導航。您能夠經過樹型目錄導航和路徑導航欄快速跳轉到指定目錄。在跳轉後樹型目錄將會自動選中當前的目錄。

 

 

路徑導航,點擊根目錄按鈕即可返根目錄

 

 

文件和目錄重命名

 

點擊刪除按鈕

說明: http://qqadapt.qpic.cn/adapt/0/a08d8c16-78a3-7ce5-c2cd-5df1e60fb8cc/800?pt=0&ek=1&kp=1&sce=0-12-12

點擊肯定後,頁面中的文件消失



 

 

批量上傳文件

 

粘貼上傳

複製文件夾、文件或圖片

說明: http://qqadapt.qpic.cn/adapt/0/ab61b9d4-755b-ee18-376d-f4ac80ad6417/800?pt=0&ek=1&kp=1&sce=0-12-12

在頁面中選擇好相應的上傳目錄,點擊粘貼上傳按鈕,數據便可快速開始上傳

說明: http://qqadapt.qpic.cn/adapt/0/b9fa01e5-ebec-3887-6726-67dcbc1a77ef/800?pt=0&ek=1&kp=1&sce=0-12-12



 

 

批量上傳文件和文件夾

 

文件和目錄下載

 

批量下載

同時選擇多個須要下載的文件 

而後點擊下載按鈕,設置下載目錄文件夾

說明: C:\Users\Administrator\Desktop\2222.png



 

 

點擊所有下載,開始下載

 

 

自動加載未上傳完的任務。在刷新瀏覽器或重啓電腦後仍然能夠自動加載未完成的任務。

 

 

下載完成後打開咱們設置的下載目錄文件夾,發現需下載的文件或文件夾確認已下載成功,經確認文件夾內的內容與下載文件夾內容一致

說明: http://qqadapt.qpic.cn/adapt/0/3224196a-396c-8ee1-b509-3179302fbd86/800?pt=0&ek=1&kp=1&sce=0-12-12


 

數據庫記錄

 

控件包下載:
cab(x86)
http://t.cn/Ai9pmG8S

cab(x64)http://t.cn/Ai9pm04B

xpihttp://t.cn/Ai9pubUc

crxhttp://t.cn/Ai9pmrcy

exehttp://t.cn/Ai9puobe

 

示例下載:

asp.nethttp://t.cn/Ai9pue4A

 

在線教程:
asp.net-
文件管理器教程:http://j.mp/2MLoQWf

相關文章
相關標籤/搜索