前言

上传文件我使用的是Bootstrap的插件FileInput,这个抽时间看看写个博客

现在下载我遇到坑了,而这个坑,我以前踩过.....

C#文件的下载

网上一搜,大把,下面的代码也是我复制网上的,怎么都不行

FileInfo fileInfo = new FileInfo("C:\\Users\\Justin\\Desktop\\学习\\20190528102940089.pdf");
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Disposition", "attachment;filename=" + "20190528102940089.pdf");
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.AddHeader("Content-Transfer-Encoding", "binary");
Response.ContentType = "application/octet-stream";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
Response.WriteFile(fileInfo.FullName);
Response.Flush();
Response.End();

然后我新建了个项目,把上面的代码复制进去,行了.....

我对比了一下我的项目,我居然又犯了以前踩过的一个坑,我不知道ajax不能请求下载方法!!!

ajax

ajax的返回值类型是json,text,html,xml类型,所以ajax请求的方法返回的基本上都是json格式,然而我访问的是下载方法,返回的是文件流......

返回文件路径,使用window.open打开

改版思路,使用ajax获取文件的路径,然后使用window.open打开,这里又遇到一个问题,window.open不能打开本地路径,比如D盘下的某个文件,因为js是拒绝访问磁盘的,那就换成网站路径咯

var curWwwPath = window.document.location.href;
var pathName = window.document.location.pathname;
var pos = curWwwPath.indexOf(pathName);
var localhostPaht = curWwwPath.substring(0, pos);
//这个localhostPaht就是你的网站的网址 //然后在ajax的success方法里面直接打开
window.open(localhostPaht + data.ReturnData.filePath);

这里的ReturnData就是一个json返回类,可以携带一些Model类,如下

using System;
using System.Collections.Generic;
using System.Text; namespace test.Model
{
public enum ReturnStatus
{
FAILED=0,
SUCCEED =1,
WARNNING=2
}
/// <summary>
/// 返回信息提示
/// </summary>
public class ReturnValue
{
public ReturnValue() { } public ReturnValue(ReturnStatus status, object returnData, string message)
{
Status = status;
ReturnData = returnData;
Message = message;
} public ReturnValue(ReturnStatus status, string message)
{
Status = status;
Message = message;
} /// <summary>
/// 默认失败
/// </summary>
/// <param name="result"></param>
public ReturnValue(string message)
{
Status = ReturnStatus.FAILED;
Message = message;
} /// <summary>
/// 状态
/// </summary>
public ReturnStatus Status { get; set; } /// <summary>
/// 数据对象
/// </summary>
public object ReturnData { get; set; } /// <summary>
/// 接口访问错误的时候返回的错误提示文字,访问成功的时候为空字符串
/// </summary>
public string Message { get; set; } = "";
}
}

Controller返回也很简单

 return Json(new ReturnValue(ReturnStatus.SUCCEED, new { filePath= filePath }, "下载成功"), JsonRequestBehavior.AllowGet);

最新文章

  1. 深入理解CSS Media媒体查询
  2. 《PHP程序设计》读书笔记
  3. apache开启gzip的方法
  4. python 数据聚合与分组
  5. centos7设置静态ip
  6. 转载 * jQuery实现动态分割div—通过拖动分隔栏实现上下、左右动态改变左右、上下两个相邻div的大小
  7. Python异常处理机制、调试、测试
  8. Asp.net 程序连接orcle如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,
  9. WORDPRESS修改文章文件后,出现乱码
  10. Java基础-标识符与关键字
  11. Linux命令_用户身份切换
  12. Python线程和进程
  13. mybatis中SQL语句运用总结
  14. PKU 4334 Trouble(哈希)
  15. 跨平台sdk接入总结
  16. RHEL/CentOS网络相关的配置文件路径
  17. mysql索引之二:数据结构及算法原理
  18. TOJ 1258 Very Simple Counting
  19. Qt_C++交换两个数
  20. python函数回顾:setattr()

热门文章

  1. Python之sort()函数详解
  2. MySql数据库导出完整版(导出数据库,导出表,导出数据库结构)
  3. jquery页面多个倒计时效果
  4. P4357 [CQOI2016]K远点对
  5. Zatree - Zabbix图表展示
  6. golang 常见变成问题01
  7. git添加公钥后报错sign_and_send_pubkey: signing failed: agent refused operation的解决办法
  8. Mybatis mapper接口与xml文件路径分离
  9. python3.x中lambda表达式的处理与python2不一样
  10. Fluent当中的通配符【翻译】