js上传整个文件夹

本文分享了一种用于上传大文件(如100M甚至1GB)的自定义控件实现方法,介绍了如何处理文件块并进行MD5校验,确保大文件上传的完整性和准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般10M以下的文件上传通过设置Web.Config,再用VS自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不能这样上传了。我这里分享一下我自己开发的一套大文件上传控件供大家参考。
工程截图

文件块处理代码:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Web;
using up6.db.biz;
using up6.db.utils;

namespace up6.db
{
    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

xpi:http://t.cn/Ai9pubUc

crx:http://t.cn/Ai9pmrcy

exe:http://t.cn/Ai9puobe

 

示例下载:

asp.net:http://t.cn/Ai9pue4A

 

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值