zoukankan      html  css  js  c++  java
  • asp.net批量下载文件

    需求:

    支持文件批量下载。现在有很多小图片需要批量下载。

    不在服务器打包下载。因为下载的文件可能很大,比如超过5G,打包的话服务器耗时比较长。而且下载的人比较多,很容易会造成服务器磁盘空间不足。

    支持大文件断点下载。比如下载10G的文件。

    PC端全平台支持。Windows,macOS,Linux

    全浏览器支持。ie6,ie7,ie8,ie9,ie10,ie11,edge,firefox,chrome,safari

    支持文件夹结构下载。不希望在服务器打包,而是直接下载文件夹,下载后在本地文件夹结构和服务器保持一致。

    支持从URL中下载文件。

    支持JSON数据结构。

    先放一段打包的代码。在小项目或局域网的一两个的项目中,这种打包下载方式没有太大的问题。但是在人数较多的项目中(比如超过100,或者是达到1000人)这种方式会占用较多的服务器资源,造成IO性能下降

    Default.aspx:

    <%@ Page Language="C#" CodeFile="Default.aspx.cs" Inherits="_Default" %>

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

      <html xmlns="http://www.w3.org/1999/xhtml">

       

        <head runat="server">

          <title>图片打包下载</title></head>

       

        <body>

          <form id="form1" runat="server">

            <p>

              <asp:Button ID="PackDown" runat="server" Text="打包下载" OnClick="PackDown_Click" /></p>

            <asp:GridView ID="GridView1" runat="server" Width="500px" CellPadding="8" CellSpacing="1">

              <Columns>

                <asp:TemplateField HeaderText="<input type=" checkbox "/>" InsertVisible="False">

                  <ItemTemplate>

                    <asp:CheckBox ID="CheckBox1" runat="server" /></ItemTemplate>

                  <ItemStyle HorizontalAlign="Center" /></asp:TemplateField>

                <asp:TemplateField HeaderText="文件列表" InsertVisible="False">

                  <EditItemTemplate>

                    <asp:Label ID="Label1" runat="server" Text='<%# eval_r("Name") %>'></asp:Label>

                  </EditItemTemplate>

                  <ItemTemplate>

                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label>

                  </ItemTemplate>

                </asp:TemplateField>

              </Columns>

            </asp:GridView>

          </form>

        </body>

      </html>

    Default.aspx.cs:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.IO;

    using Ionic.Zip;

    public partial class _Default: System.Web.UI.Page {

        protected void Page_Load(object sender, EventArgs e) {

            if (!Page.IsPostBack) {

                BindFilesList();

            }

        }

        void BindFilesList() {

            List < System.IO.FileInfo > lstFI = new List < System.IO.FileInfo > ();

            string[] files = System.IO.Directory.GetFiles("d:\webroot");

            foreach(var s in files) {

                lstFI.Add(new System.IO.FileInfo(s));

            }

            GridView1.DataSource = lstFI;

            GridView1.DataBind();

        }

        protected void PackDown_Click(object sender, EventArgs e) {

            Response.Clear();

            Response.ContentType = "application/zip";

            Response.AddHeader("content-disposition", "filename=DotNetZip.zip");

            using(ZipFile zip = new ZipFile(System.Text.Encoding.Default)) //解决中文乱码问题

            {

                foreach(GridViewRow gvr in GridView1.Rows) {

                    if (((CheckBox) gvr.Cells[0].Controls[1]).Checked) {

                        zip.AddFile("d:\webroot\" + (gvr.Cells[1].Controls[1] as Label).Text, ""); //AddFile()第二个参数填写时不打包路径

                    }

                }

                zip.Save(Response.OutputStream); //输出到浏览器下载

            }

            Response.End();

        }

    }

    新代码

    批量下载多个文件

    $("#btn-down-files").click(function () {

        if (downer.Config["Folder"] == "") { downer.open_folder(); return; }

        var urls = [

            { fileUrl: "http://res2.ncmem.com/res/images/ie11.png" }

            , { fileUrl: "http://res2.ncmem.com/res/images/up6.1/down.png" }

            , { fileUrl: "http://res2.ncmem.com/res/images/firefox.png" }

            , { fileUrl: "http://res2.ncmem.com/res/images/edge.png" }

            , { fileUrl: "http://res2.ncmem.com/res/images/up6.1/cloud.png" }

            , { fileUrl: "http://res2.ncmem.com/res/images/home/w.png" }

            , { fileUrl: "http://res2.ncmem.com/res/images/img.png" }

        ];

        downer.app.addUrls(urls);

    });

    批量下载文件,服务器不需要打包,直接提供URL就可以批量下载。下载后用户可以直接使用,不需要解压,提高工作效率。

    $("#btn-down-json").click(function () {

        if (downer.Config["Folder"] == "") { downer.open_folder(); return; }

        var fd = {

            nameLoc: "图片列表"

            , files: [

                { fileUrl: "http://res2.ncmem.com/res/images/ie11.png" }

                , { fileUrl: "http://res2.ncmem.com/res/images/up6.1/down.png" }

                , { fileUrl: "http://res2.ncmem.com/res/images/firefox.png" }

                , { fileUrl: "http://res2.ncmem.com/res/images/edge.png" }

                , { fileUrl: "http://res2.ncmem.com/res/images/up6.1/cloud.png" }

                , { fileUrl: "http://res2.ncmem.com/res/images/home/w.png" }

                , { fileUrl: "http://res2.ncmem.com/res/images/img.png" }

            ]

        };

        downer.app.addJson(fd);

    });

    实现效果:

    网上示例:http://blog.ncmem.com/wordpress/2019/08/28/net文件批量下载/

  • 相关阅读:
    1. 第一章: Python基础语法
    6. 第二章:C#委托和事件之.net framework3.5委托扩展
    5. 第二章:C#委托和事件之事件
    4. 第二章:C#委托和事件之委托
    3. 第一章:C#面向对象编程之继承和多态
    2. 第一章:C#面向对象编程之抽象和封装
    1. 序言
    Xamarin.Forms 调用腾讯地图
    全国行政区划数据大放送——包含邮政编码-电话区号-简拼-区划路径
    【记录】自定义服务器验证控件
  • 原文地址:https://www.cnblogs.com/songsu/p/13359394.html
Copyright © 2011-2022 走看看