.net下进行文件下载

【LVGL】从HTML到LVGL:嵌入式UI的设计迁移与落地实践 嵌入式UI迁移实践:从HTML到LVGL 本文介绍了将HTML/CSS设计的UI原型迁移到嵌入式系统(LVGL)的完整流程,重点涉及"HTML→Figma→LVGL"的三步转换方法。具体内容包括: 设计迁移流程:通过Figma作为中间桥梁,将HTML原型转化为标准设计资产,再适配到LVGL库; 工具与参数准备:详细列出了设计迁移所需的工具链和需要提取的核心设计参数; Figma还原步骤:分组件讲解如何在Figma中1:1还原HTML设计,包括标题栏、压力显示区、图表区等核心组件; LVG 阅读详情

.net 下进行文件下载有两种模式,下面分类进行讲解

直接通过文件所在地址进行下载

这种方法最简单,直接通过访问文件所在的网址进行下载
1、在当前页面下载


<a href="/portal/dir/img/cusTemplate.xlsx">客户上传模板</a>

2、新开一个页面进行下载


<a href="/portal/dir/img/cusTemplate.xlsx" target="_blank">客户上传模板</a>

通过一个中转Url进行下载

1、建立一个文件下载公共类 FileHelper,用于统一下载

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;

namespace PMS.Models
{
    public class FileHelper
    {
        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="file_path">文件的fullpath</param>
        /// <param name="show_name">下载文件的显示名称</param>
        /// <param name="is_delete_localfile">文件下载后是否要进行删除</param>
        public static void DownFile(string file_path, string show_name, bool is_delete_localfile)
        {
            //如果没有传入下载文件要显示的文件名,则自动用file_path中的文件名
            if (string.IsNullOrEmpty(show_name))
            {
                show_name = Path.GetFileName(file_path);
            }

            //如果下载文件显示的名称已有当前后缀名,则不要重复添加
            string ext = Path.GetExtension(file_path);
            if (show_name.EndsWith(ext))
            {
                ext = "";
            }

            //文件名称进行编码,已防止中文乱码
            show_name = HttpUtility.UrlEncode(show_name + ext, System.Text.Encoding.UTF8);

            var response =System.Web.HttpContext.Current.Response;
            response.Clear();
            response.ClearHeaders();
            response.AddHeader("Content-Transfer-Encoding", "binary");
            response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
            response.ContentType = "application/octet-stream";
            response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", show_name));
            response.WriteFile(file_path);
            response.Flush();
            if (is_delete_localfile)
            {
                File.Delete(file_path);
            }
            response.End();
        }
    }
}

2、建立一个Action进行下载


public ContentResult DownloadFile()
{
    string file_path = Path.Combine(Server.MapPath("~/Content/Template"), "Tmpltemprice.xlsx");
    FileHelper.DownFile(file_path, "批量模板.xlsx", false);
    return Content("下载成功");
}

3、前端调用上面建立的Action进行下载


<a href="@Url.Action("DownActDemand", "UserCenter")" target="_blank">上传模板下载</a>

通过iframe + 中转Url进行异步下载

上面的下载方法是通过页面跳转的方法进行下载,如果当前页面中转失败的话会跳出错误页面,如果新页面跳转的话会出现空白等待,用户体验不好,这个可以通过iframe进行模拟新页面中转,这样就不会出现空白等待情况
但是如果网络出现异常、下载文件太大、等待时间太长,用户点击下载后页面就会出现没有反应的情况(***实际页面在下载***),导致用户以为程式异常了
为了解决以上的情况,我们可以在点击下载按钮的时候通过js显示一个loading遮罩层
便是这样又会出现一个问题,怎么判断文件下载完成了,iframe的load方法是在页面开始加载的时候触发的,文件小下载快的时候还可以进行,但是文件大下载慢的时候,load事件触发后关闭了loading遮罩层,但是文件还没有下载完成,用户还是会以为程式异常了
为了解决这个问题,再增加一个 js+cookies 处理方法,如下
1、修改公共类,增加接收前端传来的一个随机码,添加到cookie中

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;

namespace PMS.Models
{
    public class FileHelper
    {
        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="file_path">文件的fullpath</param>
        /// <param name="show_name">下载文件的显示名称</param>
        /// <param name="is_delete_localfile">文件下载后是否要进行删除</param>
        /// <param name="compare_cookie_value">比较cookie值,进行异步下载控制loading层的隐藏</param>
        public static void DownFile(string file_path, string show_name, bool is_delete_localfile, string compare_cookie_value)
        {
            //如果没有传入下载文件要显示的文件名,则自动用file_path中的文件名
            if (string.IsNullOrEmpty(show_name))
            {
                show_name = Path.GetFileName(file_path);
            }

            //如果下载文件显示的名称已有当前后缀名,则不要重复添加
            string ext = Path.GetExtension(file_path);
            if (show_name.EndsWith(ext))
            {
                ext = "";
            }

            //文件名称进行编码,已防止中文乱码
            show_name = HttpUtility.UrlEncode(show_name + ext, System.Text.Encoding.UTF8);

            var response =System.Web.HttpContext.Current.Response;
            response.Clear();
            response.ClearHeaders();
            response.AddHeader("Content-Transfer-Encoding", "binary");
            response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
            response.ContentType = "application/octet-stream";
            response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", show_name));

            /*cookie处理*/
            HttpCookie cookie = new HttpCookie("CompareCookie");
            cookie.Value = compare_cookie_value;
            response.AppendCookie(cookie);
            /*cookie处理*/

            response.WriteFile(file_path);
            response.Flush();
            if (is_delete_localfile)
            {
                File.Delete(file_path);
            }
            response.End();
        }
    }
}

2、修改处理Action,接收一个cookie

public ContentResult DownloadFile(string compare_cookies)
{
     string file_path = Path.Combine(Server.MapPath("~/Content/Template"), "Tmpltemprice.xlsx");
     FileHelper.DownFile(file_path, "批量模板.xlsx", false, compare_cookies);
     return Content("下载成功");
}

3、添加一个异步下载 文件的JS方法

function ajaxDownload(href) {
    //显示下载等待遮罩层
    showF1();

    //生成一个随机处,作为一cookie值传入后台
    var timeCookie = Math.random();

    //把cookie值加入下载url后面
    href = href + (href.indexOf('?') > -1 ? '&' : '?') + 'compare_cookies=' + timeCookie;

    //建立一个iframe用于加载下载连接
    var oldFrame = document.getElementById('downloadFrame');
    if (oldFrame) {
        document.body.removeChild(oldFrame);
    }
    var iframe = document.createElement('iframe');
    iframe.id = 'downloadFrame';
    iframe.style.display = 'none';;
    iframe.href = href;

    document.body.appendChild(iframe);

    //每隔10秒获取后台返回的cookie进行比较,如果成功,则清除cookie,并结束此循环
    window.downHandle = setInterval(function () {
        var cookieValue = getCookie('CompareCookie');
        if (cookieValue == timeCookie) {
            closeF1();//关闭遮罩层
            clearInterval(window.downHandle);//结束循环
        }
    }, 10);
}

给下载按钮添加click事件

$('#btnDownload').click(function () {
    ajaxDownload('/UserCenter/DownloadFile');
});

以上就是下载的的大致方法了

基于STM32、HAL库的ZMOD4510AI4R气体传感器驱动程序设计 ZMOD4510AI4R是Renesas公司推出的一款数字空气质量传感器,主要用于检测臭氧(O₃)和总挥发性有机化合物(TVOC)浓度。(status & 0x80)) // 检查数据就绪位。// 等待测量完成 (实际应用中应该使用非阻塞方式)// 转换为ppb (简化转换,实际应根据传感器文档校准)* @param hzmod: ZMOD4510句柄。* @param tvoc: TVOC浓度(ppb)* @param ozone: 臭氧浓度(ppb)* @param hi2c: I2C句柄。 阅读详情

相关推荐

AtmelStudio 7 ASF库学习笔记一:新建工程、配置时钟、下载程序和查看官方例程

由于需要学习一下atmel的atsaml 系列,使用AtmelStudio 7开发,之前主要用STM32,现在看到Atmel的库函数,其实是有些类相似的。 ASF3的库对应ST的标准库。ASF4对应ST的HAL库,Ateml Start对应STM32CubeMX。但在这里还是用ASF3来开发,因为Ateml Start还不支持我的这个芯片,而且和STM32的HAL库类似,ASF4为了好移植都是底...

yxy244的博客 8658

C# WEB怎么实现大文件上传

昨天晚上一个网友给我发私信问了这个问题,这个网友是个大三的学生,也是计算机专业,是准备做毕业设计,然后刚好选的这个题目,希望能够一起探讨一下技术问题,平时对技术这块也是自己专研比较多,上学期间自学了asp.net,也自己做过一些项目,他们系的网站就是他负责开发的,可以说也是非常有能力的一个网友。ASP.NET WEB API实现简单的文件下载与上传,ASP.NET大文件分片上传,24小时技术支持服务,提供文档教程,视频教程,远程技术指导,1对1技术支持服务,提供手机,微信,QQ,邮箱,企业微信等联系方式。

alisky119的博客 903

深入解析SAP MM模块OBYC自动科目分配机制:从T030表到实战配置

本文深入解析SAP MM模块中OBYC自动科目分配机制,阐明其作为连接物流与财务核心桥梁的作用。文章以T030表为核心,详细拆解其字段结构与检索逻辑,并通过采购收货、生产发料等实战场景,手把手演示配置步骤与关键要点,帮助读者掌握从原理到实践的完整知识体系,实现业财无缝对接。

nft7creator的博客 358

C# 文件下载

C# 文件下载 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControl...

weixin_30520015的博客 223

我用 Claude Code 给 Spring Boot 老项目做了一次代码 Review:查出 4 类隐藏问题

接手 Spring Boot 老项目时,真正麻烦的往往不是编译报错,而是分散在业务代码中的空指针、N+1 查询、异常吞没和并发隐患。本文记录一次使用 Claude Code 辅助代码 Review 的完整流程,并给出提示词、Java 示例、修改方案和人工复核方法。

海波的专栏 399

Markdown编辑器介绍

这篇文章介绍了Markdown编辑器的功能和使用方法。主要内容包括:Markdown的基本语法如标题、列表、链接插入等;新增功能如图片拖拽、数学公式支持、甘特图和UML图表绘制;常用快捷键说明;以及文本导出导入操作。文章详细说明了如何通过Markdown语法实现文本格式化、代码高亮、表格创建等功能,并提供了多种图表绘制的语法示例,帮助用户更好地利用Markdown编辑器进行写作和内容创作。

soso1968的博客 1181

.net下载文件

.net下载文件

weixin_51550627的博客 712

基于ZYNQ7020芯片(黑金开发板AX7020)之AXI-FULL DDR的PL与PS交互操作。

在该工程中我们使用了PS端的串口接收功能,PS端串口接收和发送分别有一个64字节的FIFO,但是因为串口接收阈值设置为16,所以固定接收16个字节数据后才会发生中断。此测试工程得到以前知识的总结和各大网友的支持,只希望可以为学习的你更进一步,大家一起学习才是真的开心。加油,国产芯片之路。

landyjzlai的博客 3192

ASP.NET中常用的文件上传下载方法

参考文章:http://blog.ncmem.com/wordpress/2023/09/13/asp-net%e4%b8%ad%e5%b8%b8%e7%94%a8%e7%9a%84%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e4%b8%8b%e8%bd%bd%e6%96%b9%e6%b3%95/今天简单的介绍了几种文件上传与下载的方法,都是在实际的项目开发中经常需要用到的,可能还有不完善的地方,希望大家可以互相交流一下项目开发中的经验。

weixin_52041354的博客 1393

R语言使用rms包的psm函数拟合参数生存模型(parametric survival model)、并可视化列线图(诺模图、nomogram)

R语言使用rms包的psm函数拟合参数生存模型(parametric survival model)、并可视化列线图(诺模图、nomogram)

statistics+insight+vista+power 903

《大数据: Hive 交互命令和常用配置》

一、Hive 交互命令 1. 首先解决一个可能发生的问题 (log4 jar包冲突) 我这里解决方法就是删除一个,我删的是hive下的包 yexiang@hadoop1:<hive>$ hive SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/opt/soft/apache-hive-2.3.7-bin/lib/log4j-slf4j-impl-2.6.2.ja.

yexiang优快云的专栏 289

c#.net中实现文件上传下载的三种解决方案(推荐)

" size="small" type="success" @click="submitUpload">上传到服务器选取文件responseType: "blob" // 表明返回服务器返回的数据类型。

Mr_Zang666的博客 2483

手把手教你 Ubuntu 24.04 离线安装 Ollama

本文介绍 Ubuntu 下离线安装 Ollama 并使用 Ollama 部署 llama3.1-70b 大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1018

ASP.NET MVC 下载文件

使用 从 ASP.NET MVC 中的控制器下载任何文件类型FileStreamResult。注意:如果使用ASP.NET Core,请参阅此页面,如果想要将文件上传到服务器,请参阅此页面。从使用字节数组的 ASP.NET MVC 控制器下载任何数据类型。如何从 MVC 控制器(.NET Framework)下载文件。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何在ASP.NET中下载文件

  这是笔者常被问到的一个问题,如何通过ASP.NET来下载文件,这个问题可大可小,我们先从小的开始。当我们要让用户下载一个文件,最简单的方式是通过Response.Redirect指令:  Response.Redirect("test.doc")  您可以把上面这行指令放在Button的Click事件当中,当用户点击按钮之后,网页就会被转址到该word档,造成下载的效果。  但

dotnetWalker的专栏 5543

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

.net批量下载文件

ASP.NET批量下载文件的方法 这篇文章主要介绍了ASP.NET批量下载文件的方法,实例汇总了常见的asp.net实现批量下载的方法,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了ASP.NET批量下载文件的方法。分享给大家供大家参考。具体方法如下: 一、实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹。然后调用 RAR程序,对临时文件夹进行压缩,然后输出到客户端。最后删除临时文件夹。 ..

weixin_45525177的博客 1357

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

.net core下载文件

上传的文件是在wwwroot下 通过保存的路径跟文件名称完成下载 public IActionResult DownloadFile() { var filePath = "/UploadDocuments/GET//20190422050301115.docx"; var fileName = "项目原型.docx"; FileStream fs = ne...

weixin_30632883的博客 2676

.net中下载文件的方法

.net中下载文件的方法 一、//TransmitFile实现下载     protected void Button1_Click(object sender, EventArgs e)     {         /*         微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite         下

chinet_bridge的专栏 499

ASP.NET 文件打包下载

ASP.NET 文件打包下载        protected void Button1_Click(object sender, EventArgs e)         {            //下载文件             string path = Server.MapPath("xlt/");             string copyPath = Server.

T_T_X_S的专栏 1098

ASP.NET下载文件代码

<br />如何通过ASP.NET来下载文件,这个问题我们经常遇到,把常用的方法总结到一起,学习学习。当我们要让用户下载一个文件,最简单的方式是通过Response.Redirect指令:<br />Response.Redirect("test.doc")<br /><br />您可以把上面这行指令放在Button的Click事件当中,当用户点击按钮之后,网页就会被转址到该word档,造成下载的效果。<br />但是这样的下载有几个问题:<br />1、无法下载不存在的文件:例如,我们若是想把程序动态(临

c370141743的专栏 886

ASP.NET CORE WEBAPI文件下载

最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1。考虑如下场景: 文件是程序生成的。 文件应该能兼容各种格式。 浏览器可以感知进行下载。 准备 经过简单的调研,得到以下结论。 ASP.NET CORE 提供FileResult这种类型的ActionResult,可以直接返回文件结果,不需要直接处理HttpResponse。 通过Stream可以直接返回...

weixin_45120972的博客 1551

ASP.NET 实现文件下载

在日常项目中,我们经常用到文件的上传下载功能,今天分享一个在ASP.NET中下载文件的例子,通过实现IHttpHandler 来实现下载。 直接上代码: DownloadHandler.cs View Code public class DownloadHandler:IHttpHandler { public bool IsReus...

weixin_30615767的博客 506

Asp.net文件下载的实现

一种简单的方法, 将服务器端文件的服务器路径直接写到一个LinkButton或者HyperLink的Url中, 让浏览器完成下载. 但这么做不够灵活, 只能在page_load的时候写死每个链接, 且直接使用明文公开文件路径, 大大降低了安全性. 这里我们使用一种基于Response对象的文件传输方法, 改方法同样是基于http协议的. 我们可以在一个按钮的相应函数中写入如下代码: ...

weixin_30699443的博客 1627
上一篇: .net core 使用ViewComponent
下一篇: .NET MVC后台获得VIEW对应的html
redmethod
博客等级 码龄14年 1粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值