• .Net MVC 下载网站的文件


    前言

    上传文件我使用的是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);
    
  • 相关阅读:
    Old Calculator
    C# 使用微软的Visual Studio International Pack 类库提取汉字拼音首字母
    C#汉字转拼音(npinyin)将中文转换成拼音全文或首字母
    .net中FtpClient类
    用FileZilla Server架设FTP服务器
    asp.net(c#)从Cache对象删除项
    Web开发 前台常用方法 BasePage类
    页面 生命周期事件
    Asp.Net生命周期和Http管道技术
    用三张图片详解Asp.Net 全生命周期
  • 原文地址:https://www.cnblogs.com/yunquan/p/11054487.html
Copyright © 2020-2023  润新知