首页 > 其他分享 >Web实现浏览器端大文件分块上传

Web实现浏览器端大文件分块上传

时间:2023-07-21 18:48:11浏览次数:48  
标签:Web string 分块 端大 System 文件夹 new using 源码

ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。

下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。

ASP.NET页面设计:TextBox和Button按钮。

 

编辑

TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Button实现选择文件夹的问题还没有解决,暂时只能手动输入。

两种方法:生成rar和zip。

1.生成rar

using Microsoft.Win32;

using System.Diagnostics;

    {

 

    }

    ///

   /// 压缩文件

   ///

   /// 需要压缩的文件夹或者单个文件

   /// 生成压缩文件的文件名

   /// 生成压缩文件保存路径

   ///

    protected bool RAR(string DFilePath, string DRARName,string DRARPath)

    {

        String therar;

        RegistryKey theReg;

        Object theObj;

        String theInfo;

        ProcessStartInfo theStartInfo;

        Process theProcess;

        try

        {

 

<span ");<="" span="">

            therar = theObj.ToString();

            theReg.Close();

            therar = therar.Substring(1, therar.Length - 7);

 

            theStartInfo = new ProcessStartInfo();

            theStartInfo.FileName = therar;

            theStartInfo.Arguments = theInfo;

            theStartInfo.WindowStyle = ProcessWindowStyle.Hidden;

            theStartInfo.WorkingDirectory = DRARPath ; //RaR文件的存放目录。

            theProcess = new Process();

            theProcess.StartInfo = theStartInfo;

            theProcess.Start();

            theProcess.WaitForExit();

            theProcess.Close();

            return true;

        }

        catch (Exception ex)

        {

            return false;

        }

    }

 

    ///

    /// 解压缩到指定文件夹

    ///

    /// 压缩文件存在的目录

    /// 压缩文件名称

    /// 解压到文件夹

    ///

    protected bool UnRAR(string RARFilePath,string RARFileName,string UnRARFilePath)

    {

        //解压缩

        String therar;

        RegistryKey theReg;

        Object theObj;

        String theInfo;

        ProcessStartInfo theStartInfo;

        Process theProcess;

        try

         {

 

<span ");<="" span="">

            therar = theObj.ToString();

            theReg.Close();

            therar = therar.Substring(1, therar.Length - 7);

 

            theStartInfo = new ProcessStartInfo();

            theStartInfo.FileName = therar;

            theStartInfo.Arguments = theInfo;

            theStartInfo.WindowStyle = ProcessWindowStyle.Hidden;

            theProcess = new Process();

            theProcess.StartInfo = theStartInfo;

            theProcess.Start();

            return true;

        }

        catch (Exception ex)

         {

             return false;

         }

    }

注:这种方法在在电脑注册表中未找到应有的路径,未实现,仅供参考。

2.生成zip

通过调用类库ICSharpCode.SharpZipLib.dll

该类库可以从网上下载。也可以从本链接下载:SharpZipLib_0860_Bin.zip

增加两个类:Zip.cs和UnZip.cs

(1)Zip.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

 

using System.IO;

using System.Collections;

using ICSharpCode.SharpZipLib.Checksums;

using ICSharpCode.SharpZipLib.Zip;

 

 

    /// <summary>

    /// 功能:压缩文件

    /// creator chaodongwang 2009-11-11

    /// </summary>

    public class Zip

    {

        /// <summary>

        /// 压缩单个文件

        /// </summary>

 

 

 

 

        public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel)

        {

            //如果文件没有找到,则报错

            if (!System.IO.File.Exists(FileToZip))

            {

 

            }

 

            if (ZipedFile == string.Empty)

            {

 

            }

 

 

            {

 

            }

 

            ////如果指定位置目录不存在,创建该目录

 

            //if (!Directory.Exists(zipedDir))

            //    Directory.CreateDirectory(zipedDir);

 

            //被压缩文件名称

            string filename = FileToZip.Substring(FileToZip.LastIndexOf('\\') + 1);

           

            System.IO.FileStream StreamToZip = new System.IO.FileStream(FileToZip, System.IO.FileMode.Open, System.IO.FileAccess.Read);

            System.IO.FileStream ZipFile = System.IO.File.Create(ZipedFile);

            ZipOutputStream ZipStream = new ZipOutputStream(ZipFile);

            ZipEntry ZipEntry = new ZipEntry(filename);

            ZipStream.PutNextEntry(ZipEntry);

            ZipStream.SetLevel(CompressionLevel);

            byte[] buffer = new byte[2048];

            System.Int32 size = StreamToZip.Read(buffer, 0, buffer.Length);

            ZipStream.Write(buffer, 0, size);

            try

            {

                while (size < StreamToZip.Length)

                {

                    int sizeRead = StreamToZip.Read(buffer, 0, buffer.Length);

                    ZipStream.Write(buffer, 0, sizeRead);

                    size += sizeRead;

                }

            }

            catch (System.Exception ex)

            {

                throw ex;

            }

            finally

            {

                ZipStream.Finish();

                ZipStream.Close();

                StreamToZip.Close();

            }

        }

 

        /// <summary>

        /// 压缩文件夹的方法

        /// </summary>

        public void ZipDir(string DirToZip, string ZipedFile, int CompressionLevel)

        {

            //压缩文件为空时默认与压缩文件夹同一级目录

            if (ZipedFile == string.Empty)

            {

 

 

            }

 

 

            {

 

            }

 

            using (ZipOutputStream zipoutputstream = new ZipOutputStream(File.Create(ZipedFile)))

            {

                zipoutputstream.SetLevel(CompressionLevel);

                Crc32 crc = new Crc32();

                Hashtable fileList = getAllFies(DirToZip);

                foreach (DictionaryEntry item in fileList)

                {

                    FileStream fs = File.OpenRead(item.Key.ToString());

                    byte[] buffer = new byte[fs.Length];

                    fs.Read(buffer, 0, buffer.Length);

                    ZipEntry entry = new ZipEntry(item.Key.ToString().Substring(DirToZip.Length + 1));

                    entry.DateTime = (DateTime)item.Value;

                    entry.Size = fs.Length;

                    fs.Close();

                    crc.Reset();

                    crc.Update(buffer);

                    entry.Crc = crc.Value;

                    zipoutputstream.PutNextEntry(entry);

                    zipoutputstream.Write(buffer, 0, buffer.Length);

                }

            }

        }

 

        /// <summary>

        /// 获取所有文件

        /// </summary>

        /// <returns></returns>

        private Hashtable getAllFies(string dir)

        {

            Hashtable FilesList = new Hashtable();

            DirectoryInfo fileDire = new DirectoryInfo(dir);

            if (!fileDire.Exists)

            {

 

            }

 

            this.getAllDirFiles(fileDire, FilesList);

            this.getAllDirsFiles(fileDire.GetDirectories(), FilesList);

            return FilesList;

        }

        /// <summary>

        /// 获取一个文件夹下的所有文件夹里的文件

        /// </summary>

 

 

        private void getAllDirsFiles(DirectoryInfo[] dirs, Hashtable filesList)

        {

            foreach (DirectoryInfo dir in dirs)

            {

 

                {

                    filesList.Add(file.FullName, file.LastWriteTime);

                }

                this.getAllDirsFiles(dir.GetDirectories(), filesList);

            }

        }

        /// <summary>

        /// 获取一个文件夹下的文件

        /// </summary>

 

 

        private void getAllDirFiles(DirectoryInfo dir, Hashtable filesList)

        {

 

            {

                filesList.Add(file.FullName, file.LastWriteTime);

            }

        }

    }

(2)UnZip.cs

using System.Collections.Generic;

using System.Linq;

using System.Web;

 

/// <summary>

/// 解压文件

/// </summary>

 

using System;

using System.Text;

using System.Collections;

using System.IO;

using System.Diagnostics;

using System.Runtime.Serialization.Formatters.Binary;

using System.Data;

 

using ICSharpCode.SharpZipLib.Zip;

using ICSharpCode.SharpZipLib.Zip.Compression;

using ICSharpCode.SharpZipLib.Zip.Compression.Streams;

 

    /// <summary>

    /// 功能:解压文件

    /// creator chaodongwang 2009-11-11

    /// </summary>

    public class UnZipClass

    {

        /// <summary>

        /// 功能:解压zip格式的文件。

        /// </summary>

 

 

 

        /// <returns>解压是否成功</returns>

        public void UnZip(string zipFilePath, string unZipDir)

        {

            if (zipFilePath == string.Empty)

            {

 

            }

            if (!File.Exists(zipFilePath))

            {

 

            }

            //解压文件夹为空时默认与压缩文件同一级目录下,跟压缩文件同名的文件夹

            if (unZipDir == string.Empty)

                unZipDir = zipFilePath.Replace(Path.GetFileName(zipFilePath), Path.GetFileNameWithoutExtension(zipFilePath));

 

 

            if (!Directory.Exists(unZipDir))

                Directory.CreateDirectory(unZipDir);

 

            using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFilePath)))

            {

 

                ZipEntry theEntry;

                while ((theEntry = s.GetNextEntry()) != null)

                {

                    string directoryName = Path.GetDirectoryName(theEntry.Name);

                    string fileName = Path.GetFileName(theEntry.Name);

                    if (directoryName.Length > 0)

                    {

                        Directory.CreateDirectory(unZipDir + directoryName);

                    }

 

 

                    if (fileName != String.Empty)

                    {

                        using (FileStream streamWriter = File.Create(unZipDir + theEntry.Name))

                        {

 

                            int size = 2048;

                            byte[] data = new byte[2048];

                            while (true)

                            {

                                size = s.Read(data, 0, data.Length);

                                if (size > 0)

                                {

                                    streamWriter.Write(data, 0, size);

                                }

                                else

                                {

                                    break;

                                }

                            }

                        }

                    }

                }

            }

        }

    }

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Drawing;

 

using Microsoft.Win32;

using System.Diagnostics;

 

 

    public partial class UpLoadForm : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

 

        }

 

        protected void Button1_Click(object sender, EventArgs e)

        {

<span ")="" 如果输入为空,则弹出提示<="" span="">

            {

");

            }

            else

            {

                //压缩文件夹

                string zipPath = TextBox1.Text.Trim(); //获取将要压缩的路径(包括文件夹)

 

                Zip Zc = new Zip();

                Zc.ZipDir(zipPath, zipedPath, 6);

");

 

                //解压文件夹

                UnZipClass unZip = new UnZipClass();

 

");

 

            }

        }

    }

​编辑

​编辑

​编辑

​编辑

 

视频演示:

 

windows控件安装,,linux-deb控件包安装,linux-rpm控件包安装,php7测试,php5测试,vue-cli-测试,asp.net-IIS测试,asp.net-阿里云(oss)测试,asp.net-华为云(obs)测试,jsp-springboot测试,ActiveX(x86)源码编译,ActiveX(x64)源码编译,Windows(npapi)源码编译,macOS源码编译,Linux(x86_64)源码编译,Linux(arm)源码编译,Linux(mips-uos)源码编译,Linux(mips-kylin-涉密环境)源码编译,sm4加密传输,压缩传输,

示例下载地址

源代码文档

asp.net源码下载jsp-springboot源码下载jsp-eclipse源码下载jsp-myeclipse源码下载php源码下载csharp-winform源码下载vue-cli源码下载c++源码下载

详细配置信息及思路

 

 

标签:Web,string,分块,端大,System,文件夹,new,using,源码
From: https://www.cnblogs.com/songsu/p/17572191.html

相关文章

  • 前端实现浏览器端大文件分块上传
    ​  上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败。一开始以为是session过期或者文件大小受系统限制,导致的错误。查看了系统的配置文件没有看到文件大小限制,web.xml中seesiontimeout是30,我把它改成了120。但还是不行,有时候10分钟就崩了。同事说,可能是客户这......
  • 使用参数属性对.Net WebApi参数校验
    .NetWebApi进行优雅的参数校验受到了springboot中注解校验参数的启发,于是想,难道微(巨)软(硬)的.net不行吗?于是有了本次尝试。当我们日常开发webapi接口时,难免会有一堆参数校验,例如校验参数是否为空,密码长度……条件校验一般的操作是下面这样的:emm……目前这是2个字段参......
  • B/S实现浏览器端大文件分块上传
    ​ 一、功能性需求与非功能性需求要求操作便利,一次选择多个文件和文件夹进行上传;支持PC端全平台操作系统,Windows,Linux,Mac支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务器端......
  • WebUploader实现浏览器端大文件分块上传
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • php实现浏览器端大文件分块上传
    ​ 前段时间做视频上传业务,通过网页上传视频到服务器。视频大小小则几十M,大则1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制;2,请求时间过长,请求超时;3,传输中断,必须重新上传导致前功尽弃; 解决方案:1,修改服务端上传的限制配置;Nginx以......
  • csharp实现浏览器端大文件分块上传
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • Bug_ku source (WEB) wp
    在源代码中注释中发现了flag,提交发现是假的。我们打开kali用dirserch扫描一下网站后台目录吧 发现.git,这题应该是一个git泄露的题,用wget吧文件下载到本地,-r选项的作用是递归下载该目录及其子目录的所有文件Linux必备下载命令之wget详解-知乎(zhihu.com)cd进我们下......
  • Web安全测试点
    随着因特网的不断发展,人们对网络的使用越来越频繁,通过网络进行购物、支付等其他业务操作。而一个潜在的问题是网络的安全性如何保证,一些黑客利用站点安全性的漏洞来窃取用户的信息,使用户的个人信息泄漏,所以站点的安全性变得很重要。Web系统的安全性测试包括以下内容:(1)Web漏洞......
  • CTFer成长记录——CTF之Web专题·攻防世界-PHP2
    一、题目链接  https://adworld.xctf.org.cn/challenges/list二、解法步骤  打开网页,只有一个提示:查看源代码:也是啥也没有,这个时候访问index.phps才查看源代码:  可以发现我们需要构造id的值不等于"admin",而且url解码后要等于"admin",那我们可以id进行url编码。注意这......
  • web code监控
    #!/usr/bin/envpython#-*-coding:utf-8-*-#@Time:2023/7/414:00#@Author:zk_linux#@File:monitoring_code.py#@Software:PyCharm#@Description:Monitoringverificationcode,SMSpinalarmimportrequestsimporturllibimportloggin......