背景:前后端分离项目,文件下载

项目中 因为实际文件名和路径里的文件名 不一致(一般路径文件名需要使用唯一名字)

刚开始使用返回链接的方式,会出现图片直接预览,文件名会以路径文件名下载,用户体验不好。

更改方案: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 下载文件问题的更多相关文章

  1. api下载文件

    net /// <summary> ///字符流下载方法 /// </summary> /// <param name="fileName">下 ...

  2. Meteor 前端 RESTful API 通过后端 API 下载文件

    Meteor 下载文件 问题场景 后端 HTTP server提供一个下载接口,可是须要前端 Meteor 可以给浏览器用户开一个URL来下载这个文件. 举例:在线的Meteor Logo文件就好比后 ...

  3. ASP.NET MVC Ajax下载文件(使用NPOI向现有的excel模板文件里面添加数据)

    View Html.DevExpress().Button(DevExpressButtonHelper.AddButton(ViewBag.Form, "Export", &qu ...

  4. Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转

    一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件到本地实例>本文以这篇文章的基础,提供了Byt ...

  5. 下载文件时-修改文件名字 Redis在Windows中安装方法 SVN安装和使用(简单版) WinForm-SQL查询避免UI卡死 Asp.Net MVC Https设置

    下载文件时-修改文件名字   1后台代码 /// <summary> /// 文件下载2 /// </summary> /// <param name="Fil ...

  6. spring mvc 避免IE执行AJAX时,返回JSON出现下载文件

    <!-- 避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJacksonHttpMessageConverter" c ...

  7. MVC下载文件方式

    MVC下载文件方式 http://www.cnblogs.com/liang--liang/archive/2012/10/20/2732745.html 方式一: public FileStream ...

  8. mvc下载文件

    MVC下载文件方式 方式一: public FileStreamResult DownFile(string filePath, string fileName)  {       string ab ...

  9. spring MVC 下载文件(转)

    springle MVC中如何下载文件呢? 比struts2 下载文件简单得多 先看例子: @ResponseBody @RequestMapping(value = "/download& ...

  10. Asp.net mvc 下载文件

    前言 最近有需求需要下载文件,可能是image的图片,也可能是pdf报告,也可能是微软的word或者excel文件. 这里就整理了asp.net mvc 和asp.net webapi 下载的方法 A ...

随机推荐

  1. IM跨平台技术学习(六):网易云信基于Electron的IM消息全文检索技术实践

    本文作者网易云信高级前端开发工程师李宁,本文有修订. 1.引言 在IM客户端的使用场景中,基于本地数据的全文检索功能扮演着重要的角色,最常用的比如:查找聊天记录.联系人等. 类似于IM中的聊天记录查找 ...

  2. asp.net core Theme 中间件

    asp.net core中自定义视图引擎,继承接口 IViewLocationExpander public class ThemeViewLocationExpander : IViewLocati ...

  3. k8s列出所有未配置探针的deployment

    在 Kubernetes 中,探针(Probes)用于检测容器的健康状态,主要包括以下三种: Liveness Probe(存活探针):检测容器是否正在运行. Readiness Probe(就绪探针 ...

  4. w3cschool-微信小程序开发文档-服务端

    微信小程序 code2Seesion auth.code2Session 本接口应在服务器端调用,详细说明参见服务端API. 登录凭证校验.通过 wx.login 接口获得临时登录凭证 code 后传 ...

  5. 使用Python的一维卷积

    学习&转载文章:使用Python的一维卷积 背景 在开发机器学习算法时,最重要的事情之一(如果不是最重要的话)是提取最相关的特征,这是在项目的特征工程部分中完成的. 在CNNs中,此过程由网络 ...

  6. SM9-密钥封装

    算法过程 代码实现 ///************************************************************************ // File name: ...

  7. Spring AI 提交 PR 实战指南:避免常见坑

    今天,我们将简单地了解如何向 Spring AI 提交 PR(Pull Request).在这个过程中,有一些常见的坑需要大家注意和避免,特别是在 Git 操作方面.我们会重点关注提交信息的规范,如何 ...

  8. 数字先锋 | SaaS服务“拎包入住”?央企数字化转型体验感拉满!

    数字化转型已成为企业生存和发展的"必修课".作为国民经济的"压舱石""顶梁柱",国资央企正加快"上云用数赋智"步伐,引领 ...

  9. 项目中途引入Mybatis-plus后报错,报错Caused by: java.lang.ClassNotFoundException: org.mybatis.logging.LoggerFactory

    一.报错原因 mybatis-plus和pagehelper jar包冲突,注释mybatis-spring和pagehelper插件即可 <!-- SpringBoot集成mybatis框架 ...

  10. 2025牛客寒假算法基础集训营1 (E)

    [!note] 比赛链接 https://ac.nowcoder.com/acm/contest/953231 A.茕茕孑立之影 题目标签 构造 数论 题目大意 找到一个数x,x和长度为n的数组中的数 ...