第六章 MVC之 FileResult和JS请求二进制文件

简介: 一、FileResult  1、简介 表示一个用于将二进制文件内容发送到响应的基类。它有三个子类: FileContentResultFilePathResultFileStreamResult 推荐阅读:https://www.

一、FileResult 

1、简介

表示一个用于将二进制文件内容发送到响应的基类。它有三个子类:

FileContentResult
FilePathResult
FileStreamResult

推荐阅读:https://www.cnblogs.com/weiweixiang/p/5667355.html

2、FilePathResult

首先、创建一个mvc5项目、然后添加一个FileTest控制器,添加以下方法

  public ActionResult Export()
        {
            // Response.ContentType指定文件类型 可以为application/ms-excel || application/ms-word || application/ms-txt || application/ms-html
            return File(Server.MapPath("/UserData/test.docx"), "application/ms-word", "test.docx");
        }
 
<p> 
    <a href='/filetest/export' download>下载</a> 
</p>

使用非常方便,这样即可实现下载

3、FileContentResult

        public ActionResult Getbg()
        { 
            string bgimg = AppDomain.CurrentDomain.BaseDirectory + "/UserData/bg.jpg";
            Image img = Image.FromFile(bgimg);
            byte[] bytes = ImageToBytes(img);

            return File(bytes, "image/jpeg");
        }
    <img src="/filetest/Getbg" width="300" alt="" />

使用非常方便,这样即可实现图片的显示,在临时描绘图片并展示的场景中非常实用。

4、FileStreamResult

 public ActionResult ExportDoc()
        {
            var path = Server.MapPath("/UserData/test.docx");
            var fileName = HttpUtility.UrlEncode("test.docx", Encoding.GetEncoding("UTF-8"));
            return File(new FileStream(path, FileMode.Open), "application/ms-word", fileName);
        }
    <a href='/filetest/exportdoc' download>使用FileStreamResult下载Doc</a>

 

二、JS请求二进制文件

<p> 
    <button onclick="showBg()">JS显示图片</button>
    <div id="divImg">

    </div>
</p>
<script type="text/javascript">
    //window.location.href = "Export";
    var showBg = function () {
        var xmlhttp = new XMLHttpRequest(); 
        xmlhttp.open("GET", "/filetest/Getbg", true);
        xmlhttp.responseType = "blob";
        xmlhttp.setRequestHeader("client_type", "DESKTOP_WEB");
        xmlhttp.onload = function () {
            if (this.status === 200) {
                var blob = this.response;
                var img = document.createElement("img");
                img.onload = function (e) {
                    window.URL.revokeObjectURL(img.src);
                };
                img.src = window.URL.createObjectURL(blob);
                img.width = 500; 
                $("#divImg").html(img); 
            }
        }; 
        xmlhttp.send(); 
    };
</script>

jquery并不支持流文件,

js重要实现来自于情郎的博文:ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践

 

知识点:

Content-Disposition

http://www.jb51.net/article/30565.htm    

  header中Content-Disposition的作用与使用方法:

  当代码里面使用Content-Disposition来确保浏览器弹出下载对话框的时候。 response.addHeader("Content-Disposition","attachment");一定要确保没有做过关于禁止浏览器缓存的操作。如下:

response.setHeader("Pragma", "No-cache"); 
response.setHeader("Cache-Control", "No-cache"); 
response.setDateHeader("Expires", 0); 

http://blog.csdn.net/iamiwangbo/article/details/52911716

XMLHttpRequest

  使用blob实现文件的下载和上传

 

本文源码下载:https://gitee.com/zmsofts/XinCunShanNianDaiMa/blob/master/ActionResultOfMvc5Study.rar

 

 

参考:

https://msdn.microsoft.com/zh-cn/library/system.web.mvc.fileresult.aspx

http://www.cnblogs.com/bmib/p/3518486.html

http://www.runoob.com/ajax/ajax-intro.html    ajax学习

https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest

http://www.ruanyifeng.com/blog/2012/09/xmlhttprequest_level_2.html  讲解XMLHttpRequest 1 和2 的区别

http://www.cnblogs.com/cdemo/p/5225848.html

https://www.cnblogs.com/weiweixiang/p/5667355.html

C# byte数组与Image的相互转换

https://www.cnblogs.com/xielong/p/5940535.html

 

相关文章
|
3月前
|
JavaScript API
深入探索fs.WriteStream:Node.js文件写入流的全面解析
深入探索fs.WriteStream:Node.js文件写入流的全面解析
|
3月前
|
存储 JavaScript 前端开发
JS上传文件(base64字符串和二进制文件流)
这篇文章介绍了两种JavaScript文件上传的方法:使用FileReader对象将文件读取为base64字符串上传,以及使用FormData对象以二进制文件流的形式上传文件,包括如何处理文件选择、读取和上传的详细代码示例。
390 2
JS上传文件(base64字符串和二进制文件流)
|
30天前
|
JavaScript 前端开发 内存技术
js文件的入口代码及需要入口代码的原因
js文件的入口代码及需要入口代码的原因
33 0
|
23天前
|
设计模式 前端开发 Java
Spring MVC——项目创建和建立请求连接
MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
31 1
Spring MVC——项目创建和建立请求连接
|
28天前
|
JavaScript
Node.js GET/POST请求
10月更文挑战第6天
33 2
Node.js GET/POST请求
|
2月前
|
前端开发 JavaScript API
前端JS读取文件内容并展示到页面上
前端JavaScript使用FileReader API读取文件内容,支持文本类型文件。在文件读取成功后,可以通过onload事件处理函数获取文件内容,然后展示到页面上。
64 2
前端JS读取文件内容并展示到页面上
|
1月前
|
缓存 JavaScript CDN
一次js请求一般情况下有哪些地方会有缓存处理?
一次js请求一般情况下有哪些地方会有缓存处理?
37 4
|
2月前
|
JavaScript 前端开发 数据安全/隐私保护
混淆指定js文件
【9月更文挑战第26天】JavaScript 混淆旨在保护代码知识产权、减小文件体积和提高安全性。方法包括变量名和函数名混淆、代码压缩、控制流平坦化及字符串加密。常用工具如 UglifyJS 和 JScrambler 可实现这些功能。然而,混淆可能带来兼容性和调试困难等问题,需谨慎使用并确保法律合规。
|
22天前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
110 0
|
2月前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
133 10