zoukankan      html  css  js  c++  java
  • 使用FileResult返回浏览器文件及乱码问题解决

    一、向客户端发送文件方法

    Asp.Net 中返回文件方法

    public void TxtFile(string filename)
    {
        //html文件
        string path = @"E:Win10桌面" + filename;
        Response.ContentType = "text/xml";
        //直接输出文件
        Response.TransmitFile(path);
    }

    MVC中返回文件方法

    public FileResult TxtFile(string filename)
    {
        //txt,html,xml文件
        string path = @"E:Win10桌面" + filename;
    
        string contentType = "text/plan";
        if (filename.Contains("html"))
            contentType = "text/html";
        else if (filename.Contains("xml"))
            contentType = "text/xml";
        //指定文件路径 返回FilePathResult
        return File(path, contentType);
    }

    注意:很多时候返回html 文件在浏览器中显示乱码,原因是浏览器解析html文件默认使用utf-8编码解析,然而有很多网页的文件内容以及文件头使用gb2312编码,

    解决方法是使用记事本

    1.打开html源文件另存文件,选择utf-8编码,

    2.修改html 文件头 content-type类型 为utf-8

    如果源代码为:

    <meta http-equiv="Content-type" content="text/html;" charset="gb2312" />

    二、FileResult 介绍

    1.

       FileResult是一个基于文件的ActionResult,利用FileResult我们可以很容易地将从某个物理文件的内容响应给客户端。ASP.NET MVC定义了三个具体的FileResult,分别是FileContentResult、FilePathResult和FileStreamResult。

      针对文件的响应具有两种形式,即内联(Inline)和附件(Attachment)。一般来说,前者会利用浏览器直接打开响应的文件,而后者会以独立的文件下载到客户端。对于后者,我们一般会为下载的文件指定一个文件名,这个文件名可以通过FileResult的FileDownloadName属性来指定。文件响应在默认情况下采用内联的方式,如果需要采用附件的形式,需要为响应创建一个名称为Content-Disposition的报头,该报头值的格式为“attachment; filename={ FileDownloadName }”。

    2.

    FileContentResult是针对文件内容创建的FileResult。如下面的代码片断所示,FileContentResult具有一个字节数组类型的只读属性FileContents表示响应文件的内容,该属性在构造函数中指定。FileContentResult针对文件内容的响应实现也很简单,从如下所示的WriteFile方法定义可以看出,它只是调用当前HttpResponse的OutputStream属性的Write方法直接将表示文件内容的字节数组写入响应输出流。

    3.

    从名称可以看出,FilePathResult是一个根据物理文件路径创建FileResult。如下面的代码片断所示,表示响应文件的路径通过只读属性FileName表示,该属性在构造函数中被初始化。在实现的WriteFile方法中,FilePathResult直接将文件路径作为参数调用当前HttpResponse的TransmitFile实现了针对文件内容的响应。抽象类Controller同样定义了两个File方法重载来根据文件路径创建相应的FilePathResult。

    4.

    FileStreamResult允许我们通过一个用于读取文件内容的流来创建FileResult。如下面的代码片断所示,读取文件流通过只读属性FileStream表示,该属性在构造函数中被初始化。在实现的WriteFile方法中,FileStreamResult通过指定的文件流读取文件内容,并最终调用当前HttpResponse的OutputStream属性的Write方法将读取的内容写入当前HTTP响应的输出流中。抽象类Controller中同样定义了两个File方法重载根据文件读取流创建相应的FileStreamResult。

  • 相关阅读:
    javaSE一些实习问题
    java并行程序基础
    http与https协议
    mybatis-plus 狂神说笔记
    弄懂java bio 和 nio 一篇就够 !!!
    异步操作Promise
    uni-app,vue-cli3或4的跨域
    7.vue之v-on
    Linux Shell 错误: $' ': command not found错误解决
    visual studio 容器工具首次加载太慢 vsdbgvs2017u5 exists, deleting 的解决方案
  • 原文地址:https://www.cnblogs.com/tianma3798/p/5417528.html
Copyright © 2011-2022 走看看