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

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

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

更改方案: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. 使用ollama玩转本地大模型

    使用ollama玩转本地大模型 https://ollama.com/download 安装 安装验证 测试 ollama run llama2 ollama run qwen

  2. blast只保留一个最优结果

    使用blast比对时,只保留一个最优结果 代码: blastn -db nt.blast.db -query seq.fa -out blast.nt.result -evalue 1e-5 -out ...

  3. Mac 下erlang及rabbitmq安装

    --------------------------------------- 1.首先,安装Homebrew安装Homebrew遇到的问题参考这个链接 2.安装erlang环境brew instal ...

  4. SSH 框架的搭建

    Structs1+spring+Hibernate Structs  相当于mvc设计模式中V.C,即jsp页面和Servlet: spring 管理业务逻辑,即Service: Hibernate ...

  5. runoob-matplotlib(python)

    https://www.runoob.com/matplotlib/matplotlib-tutorial.html Matplotlib 教程 Matplotlib 是 Python 的绘图库,它能 ...

  6. Redis常用指令(详细)

    # Redis 常用指令## 基础命令### 启动与连接```bash# 启动 Redis 服务redis-server# 连接 Redis 客户端redis-cli```### 基本操作```bas ...

  7. kali 安装

    准备 选用系统: kali-linux-2018.1-amd64.iso     kali-linux-2020.2-installer-amd64.iso 开始 2018版 1.选用图形化安装 2. ...

  8. ctfshow--web14 sql注入利用``的清奇的绕过

    输入c=3就会跳出来这个url 复制并访问,看这个页面应该是sql注入 有注释可看,看看他过滤了哪些东西 点击查看代码 if(preg_match('/information_schema\.tabl ...

  9. 如何让领导轻松在本地查看Allure报告

    如何让领导轻松在本地查看Allure报告 问题描述 当我们把精心生成的Allure报告原始文件发送给领导后,领导直接打开index.html文件时,页面却一直处于加载状态,无法显示数据. 通过F12开 ...

  10. go测试跨包代码覆盖率

    Golang虽然只是一门编程语言,但也为我们提供了不少工具,其中测试工具是最常用的,大概 前提概要 以前看书,只说了用什么工具去做覆盖率,和基本的使用,当时看了也没想太多.后面真正做项目了,老大要求比 ...