首页 > Web开发 > 详细

.Net MVC 下载网站的文件

时间:2019-06-19 20:41:03      阅读:113      评论:0      收藏:0      [点我收藏+]

前言

上传文件我使用的是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);

.Net MVC 下载网站的文件

原文:https://www.cnblogs.com/yunquan/p/11054487.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!