首页 > 其他分享 >Web 下载文件名乱码解决以及多浏览器兼容方案

Web 下载文件名乱码解决以及多浏览器兼容方案

时间:2023-04-20 10:46:31浏览次数:31  
标签:Web 浏览器 文件名 fileName 乱码 response 下载

在 web 开发中,经常我们会遇到如导出或者下载网页这种需求,但是往往会遇到在chrome浏览器下载的文件名正常,但是到 firefox,Safari上却乱码的情况,经过网上的资料多次研究,最终总结出了如下的方法,代码如下:

/// <summary>
/// 浏览器下载文件,完整文件下载,不支持分片下载,为了兼容safari,下载url请保持这个格式,
/// 否则safari下载会乱码:/api/WebFile/DownloadFile/encodeURIComponent(要下载的文件名.txt),即末尾这一段路径为文件名,
/// 如果需要取值则通过[FromRoute]实现
/// </summary>
/// <param name="response">响应</param>
/// <param name="fileName">下载文件名</param>
/// <param name="bodyStream">文件流</param>
/// <returns></returns>
public static async Task DownloadFileAsync(HttpResponse response, string fileName, Stream bodyStream)
{
    //文件名UTF 8 编码
    fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
    fileName = fileName.Replace("+", "%20");

    //指定响应类型
    response.ContentType = "application/octet-stream; charset=UTF-8";
    response.Headers.Add("Cache-Control", "no-cache");
    response.Headers.Add("Pragma", "no-cache");
    response.Headers.Add("Content-Disposition", $"attachment;filename={fileName};filename*=utf-8''{fileName};");//不同浏览器只会用自己可以识别的格式
    response.ContentLength = bodyStream.Length;
    await bodyStream.CopyToAsync(response.Body);
    bodyStream.Close();
}

上面是一个帮助类,对外的接口名可以自定义,如 /api/File/Export?fileId=5,然后路由对应的方法实现里面调用上面的方法即可。但是这种方式在Safari浏览器下下载下来的文件名仍然会有乱码,解决办法是把接口定义为 /api/File/Export/图片.png?fileId=5 这种格式,即url末尾段是想要下载的实际文件名即可,注意文件名记得用 js 函数 encodeURIComponent(图片.png) 形式编码,否则文件名带有如 % 字符会报错。这样就能完美下载文件了。

标签:Web,浏览器,文件名,fileName,乱码,response,下载
From: https://www.cnblogs.com/DHclly/p/17335920.html

相关文章

  • 手把手逐步解析Javaweb登录实例
    一、编写前端界面<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</titl......
  • 浏览器执行js脚本
    1、四种基本的形式(1)script内部<script>alert('xss')</script>(2)script引入外部js文件<scriptsrc='check.js'></script><scriptsrc=https://www.freebuf.com/freebuf/2.1.0.cd254c064b386bee9d41.js></script>需要注意如果当前页面是......
  • 浏览器打开有些pdf内容不全、打开有些论文页很多红色绿色的框
    问题问题1:edge浏览器打开pdf,只能看到表格,看不到表格里的字,用其他浏览器打开或者pdf阅读器打开都能看到完整的表格内容。问题2:用edge浏览器看pdf论文的时候,会有很多红色或绿色的框,比如:问题产生原因偶然间,我发现导致这些问题是因为我安装的“侧边翻译”插件,由于之前看网页中......
  • webgl 系列 —— 着色器语言
    其他章节请看:webgl系列着色器语言本篇开始学习着色器语言——GLSL全称是GraphicsLibraryShaderLanguage(图形库着色器语言)GLSL是一门独立的语言,和其他语言一样有自己的变量、运算符、函数、循环(for)、控制语句(if)、函数、数组等等。GLSL比较简单。其专门用于编写着色器,舍......
  • 如何在 .NET Core WebApi 中处理 MultipartFormDataContent
    最近在对某个后端服务做.NETCore升级时,里面使用了多处处理MultipartFormDataContent相关内容的代码。这些地方从.NETFramework迁移到.NETCore之后的代码改动较大,由于本身没有测试覆盖,导致在部署QA环境后引发了一些问题。这里做一个技术复盘。什么是MultipartForm......
  • 分享下之前做的STM32嵌入式Web完整设计教程和案例html,Ajax,Javacript,XML,cgi等
    这段时间好些网友咨询,特此再分享下:http://www.armbbs.cn/forum.php?mod=viewthread&tid=26034如果需要外网也可以访问,此贴:【专题教程第3期】开发板搭建Web服务器,利用花生壳让电脑和手机可以外网远程监控,手机4G访问域名效果:   微信公众号:armfly_com......
  • web页面播放spine动画及播放相关使用及总结spine-player.js
    1.官方git,里面有些例子可以参考。https://github.com/EsotericSoftware/spine-runtimes.git2.官方播放器:http://zh.esotericsoftware.com/spine-player目前测试4.0以上的js支持动画模型透明3.最基本的资源初始化html代码里面:<divid="player-container"style="width:640......
  • web前端
    工程认知——Web前端Week1一、课程概要、要求和学习方法概要:本课程将系统地学习现代软件前端开发的实用技术,在前端技术中属于中级实用技术范畴。课程包含前端三大部分HTML5、CSS3、JavaScript、前端框架和后端框架,循序渐进地将每一部分的实用技术结合讲解、演示,最后交予学生不......
  • Python常用的web开发工具,你了解多少?
    Python作为一门高级的编程语言,其在web开发领域有着十分优异的表现,自带众多Pythonweb开发应用框架,利用它们你可以轻松构建高端web应用程序。本文为大家盘点Python常用的web开发工具,快来看看你了解多少!1.CubicWebCubicWeb的最重要的支柱就是代码的可重用性。CubicWeb......
  • 【web 开发基础】PHP 自定义函数之函数的返回值-PHP 快速入门 (27)
    前言在定义函数时,函数名后面括号中的参数列表是用户在调用函数时用来将数据传递到函数内部的接口,而函数的返回值则将函数执行后的结果返回给调用者。如果函数没有返回值,就只能算一个执行过程。只依靠函数做一些事情还不够,有时更需要在程序脚本中使用函数执行后的结果。由于变量的作......