mvc api 下载文件问题
背景:前后端分离项目,文件下载
项目中 因为实际文件名和路径里的文件名 不一致(一般路径文件名需要使用唯一名字)
刚开始使用返回链接的方式,会出现图片直接预览,文件名会以路径文件名下载,用户体验不好。
更改方案:1、js 有方法以特定的名字下载,但是有跨域问题。
2、使用api 下载文件。
主要是api 下载文件遇到的问题,
刚开始使用一下代码方式,在本地开发环境可以下载,到了测试服务器上就下载不了。
path = path.Replace(WebSiteDisc, "");
path = path.Replace("/Upload", "").Replace("/", "\\");
string filePath = WebSiteDisc + path;
logger.Info(filePath);
if (File.Exists(filePath))
{
FileInfo fi = new FileInfo(filePath);
// StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
logger.Info("长度:" + fs.Length);
HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.ClearHeaders();
response.ClearContent();
response.Buffer = true;
// response.AddHeader("content-disposition", string.Format("attachment; FileName={0}", fi.Name));
response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlDecode(filename, System.Text.Encoding.UTF8));
response.AddHeader("Content-Length", fi.Length.ToString());
response.AddHeader("Content-Transfer-Encoding", "binary");
response.ContentEncoding = Encoding.GetEncoding("GB2312");
response.Charset = "gb2312";
response.ContentType = "application/octet-stream";
response.WriteFile(filePath);
logger.Info("下载完成" + filePath);
response.Flush();
response.Close();
}
后续更改文件下载方式,
添加了一行打开文件的代码
FileStream str = File.OpenRead(filePath); 测试服务器也可以正常下载了,但是会有多个进程占用问题
再次把代码改为 FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
读写共享的方式,可以正常下载了,当然还有一个要注意的问题就是 中文编码下载的问题,
加了一些编码控制,chrome 和firox 都可以了,ie还是有一些问题,最好不得已用实际的id作为文件名下载了(大家帮忙提供意见)。
mvc api 下载文件问题的更多相关文章
- api下载文件
net /// <summary> ///字符流下载方法 /// </summary> /// <param name="fileName">下 ...
- Meteor 前端 RESTful API 通过后端 API 下载文件
Meteor 下载文件 问题场景 后端 HTTP server提供一个下载接口,可是须要前端 Meteor 可以给浏览器用户开一个URL来下载这个文件. 举例:在线的Meteor Logo文件就好比后 ...
- ASP.NET MVC Ajax下载文件(使用NPOI向现有的excel模板文件里面添加数据)
View Html.DevExpress().Button(DevExpressButtonHelper.AddButton(ViewBag.Form, "Export", &qu ...
- Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转
一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件到本地实例>本文以这篇文章的基础,提供了Byt ...
- 下载文件时-修改文件名字 Redis在Windows中安装方法 SVN安装和使用(简单版) WinForm-SQL查询避免UI卡死 Asp.Net MVC Https设置
下载文件时-修改文件名字 1后台代码 /// <summary> /// 文件下载2 /// </summary> /// <param name="Fil ...
- spring mvc 避免IE执行AJAX时,返回JSON出现下载文件
<!-- 避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" c ...
- MVC下载文件方式
MVC下载文件方式 http://www.cnblogs.com/liang--liang/archive/2012/10/20/2732745.html 方式一: public FileStream ...
- mvc下载文件
MVC下载文件方式 方式一: public FileStreamResult DownFile(string filePath, string fileName) { string ab ...
- spring MVC 下载文件(转)
springle MVC中如何下载文件呢? 比struts2 下载文件简单得多 先看例子: @ResponseBody @RequestMapping(value = "/download& ...
- Asp.net mvc 下载文件
前言 最近有需求需要下载文件,可能是image的图片,也可能是pdf报告,也可能是微软的word或者excel文件. 这里就整理了asp.net mvc 和asp.net webapi 下载的方法 A ...
随机推荐
- Solution Set -「LOCAL」冲刺省选 Round X
\(\mathscr{Summary}\) 时间利用效率? 同学,你的效率呢? 我真不知道中途几个小时干了啥,我也不知道我实在划水.神游还是真的在自闭想题. 虽然真实考场肾上腺素不会允 ...
- https证书一键自动续期,帮你解放90天限制
前言 前几天网站证书到期,发觉证书颁发每次只能90天有效期,这谁能忍受,于是乎发觉网上有免费的一键续期脚本,真正解放我们的双手.项目如下acme.sh. 期间由于"墙"的原因,踩了 ...
- Fast Secure Computation of Set Intersection -解读
本节解读paper:Fast Secure Computation of Set Intersection, 主要内容 在ROM上基于OMGDH问题设计了一个可以抵抗恶意攻击的PSI,主要贡献是对该协 ...
- 九集代码深度解析SpringBoot原理:笔记整理
手动注册Tomcat中的servlet容器 子父容器概念
- ef 值转换与值比较器
前言 简单介绍一下,值转换器和值比较器. 正文 为什么有值转换器这东西呢? 那就是这个东西一直必须存在. 比如说,我们的c# enum 对应数据库的什么呢? 是int还是string呢? 一般情况下, ...
- [文件格式/数据存储] Parquet:开源、高效的列式存储文件格式协议
序:缘起 => 用 java 读取 parquet 文件 生产环境有设备出重大事故,又因一关键功能无法使用,亟需将生产环境的原始MQTT报文(以 parquet 文件格式 + zstd 压缩格式 ...
- 玩转云端 | AccessOne实用窍门之三步搞定门户网站防护与加速
随着互联网的飞速发展,网站建设已成为企事业单位推广.提供服务的重要途径之一.在数字技术快速迭代的当下,如何在保障网站安全的前提下提供高效服务,是企事业单位需要着重考虑的内容. 网站安全防护是网站建设后 ...
- 将个人PC转变为高效的云电脑:理论、实践与优化
本文分享自天翼云开发者社区<将个人PC转变为高效的云电脑:理论.实践与优化>,作者:不知不觉 在数字化时代的今天,我们越来越依赖互联网和计算机技术进行工作和生活.然而,传统的个人电脑(PC ...
- Django Rest Framework的使用
Django Rest Framework 一.Rest Framework的基本介绍 程序的客户端有很多:硬件设备,游戏,APP,软件,其他的外部服务端. 1. Web应用模式 在开发Web应用中, ...
- 【译】HTTP 文件更新了请求变量
许多用户都要求在 Visual Studio 的 HTTP 文件中添加对请求变量的支持.使用请求变量,您可以发送 HTTP 请求,然后在从 HTTP 文件发送的任何后续请求中使用响应或请求中的数据.我 ...