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

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

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

更改方案: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. Python 项目组织最佳实践:从脚本到大型项目的进化之路

    在 Python 开发生涯中,相信很多人都是从写简单脚本开始的.随着项目规模扩大,我们会遇到各种项目组织的问题.今天,让我们从一个实际场景出发,看看如何一步步优化 Python 项目结构,实现从简单脚 ...

  2. OpenMMLab AI实战营 第三课笔记

    OpenMMLab AI实战营 第三课笔记 目录 OpenMMLab AI实战营 第三课笔记 进入 mmclassification 目录 导入工具包 下载数据集 数据集目录结构 下载 config ...

  3. Apgar score

    Apgar score Apgar is a quick test performed on a baby at 1 and 5 minutes after birth. The 1-minute s ...

  4. 深入解析 Spring AI 系列:以OpenAI与Moonshot案例为例寻找共同点

    今天,我们将重点探讨对接的业务逻辑.为了帮助大家更直观地掌握其中的规律性,我将通过对比OpenAI与<月之暗面>中的Moonshot两个案例来阐述这一点.通过这样的对比,大家可以更清晰地看 ...

  5. Java经典面试36题和答案

    1."static"关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法? "static"关键字表明一个成员 ...

  6. 一个奇葩的SQL题,够强大。

    困惑描述: 现有一张图片表,表里一个sort字段,这个字段是不重复的.不连续的数字.大致结构如下 create table Imgs( `id` bigint(20) NOT NULL AUTO_IN ...

  7. .NET Core GC计划阶段(plan_phase)底层原理浅谈

    简介 在mark_phase阶段之后,所有对象都被标记为有用/垃圾对象.此时,垃圾回收器已经拥有启动垃圾回收的所有前置准备工作. 这个时候,垃圾回收期应该执行"清除回收"还是&qu ...

  8. Node.js 中 mysql 事务的写法

    最近做一个公司内部的信息化平台,本着短平快,选择了 Nodejs + Express + Vue + mysql/mongodb 的技术路线. 该写法主要利用了递归,下面把事务的写法记录一下,做了简单 ...

  9. idea遇见Command line is too long. Shorten command line for Main or also for Application default configuration?

    <property name="dynamic.classpath" value="true" /> 第一步:找到项目目录下的.idea\works ...

  10. xshell连接服务器无法用password登录,只能用public key的解决办法

    xshell无法用password登录服务器,只能用public key的解决办法 只能用public key登录, 那么我们用阿里云后台的远程连接按钮进入服务器,进入后 修改/etc/ssh/ssh ...