找回密码
 加入怎通
查看: 911|回复: 2

[其他] ASP.NET MVC:经过FileResult向阅读器发送资料

[复制链接]
杨莹莹连 发表于 2013-11-08 11:39:39 | 显示全部楼层 |阅读模式
  正在 Controller 中咱们能够运用 FileResult 向存户端发送资料。+ }, @5 R, ]: t( K9 d

8 |5 G; {9 D+ e7 ?" k# M1 y  FileResult
4 [0 ~1 ]( U! n% K1 \: Q" k$ Z' y8 U2 m, |6 ~3 j9 K
  FileResult 是一度形象类,承继自 ActionResult。正在 System.Web.Mvc.dll 中,它有如上三个子类,辨别以没有同的形式向存户端发送资料。: n! ~9 s6 e# d4 ^6 D
, l' I) P8 e2 z( P3 k
  正在实践运用中咱们一般没有需求间接范例化一度 FileResult 的子类,由于 Controller 类曾经需要了六个 File 办法来简化咱们的操作:
0 X6 ?4 k9 ?" b( `3 V" j9 U
) {; z: {" N; a. O  protected internal FilePathResult File(string fileName, string contentType);protected internal virtual FilePathResult File(string fileName, string contentType, string fileDownloadName);protected internal FileContentResult File(byte[] fileContents, string contentType);protected internal virtual FileContentResult File(byte[] fileContents, string contentType, string fileDownloadName);protected internal FileStreamResult File(Stream fileStream, string contentType);protected internal virtual FileStreamResult File(Stream fileStream, string contentType, string fileDownloadName);
7 ~- E% U' v3 }* s3 i7 S9 h2 n+ F1 p& G
  FilePathResult5 z0 R* Y9 w+ D: F$ b" Q9 W& r% Y

. q1 O' E0 N/ _- B/ |  FilePathResult 间接将磁盘上的资料发送至阅读器:9 M5 @. q0 l' y# g6 s/ I

5 s+ ~% ~2 P" A# }  1. 最容易的形式
' ~; A7 }  V) k0 J3 y0 i  U. Z
" [: |% q! B# b) l1 G! k2 c  public ActionResult FilePathDownload1(){ var path = Server.MapPath("~/Files/鹤冲天.zip"); return File(path, "application/x-zip-compressed");
5 X! }+ ~7 Z  m
) t! L: O7 o% k7 r2 [  第一度参数指名资料门路,第二个参数指名资料的 MIME 类型。用户点击阅读器上的键入链接后,会调出键入窗口:) u" i* j8 H& V. ^# F
% Y. n2 r- v5 S4 q! q- v
  自己该当留意到,资料称号会成为 Download1.zip,默许成了 Action 的名字。咱们运用 File 办法的第二个重载来处理资料名的成绩:
3 l/ l$ Z1 O. x' }. z0 e+ D
% ^: @, L) Z# o# a9 h  2. 指名 fileDownloadName) M4 |3 V$ R! j9 w# X% z  }
* ^  M* n: _5 A  [
  public ActionResult FilePathDownload2(){ var path = Server.MapPath("~/Files/鹤冲天.zip");  return File("g:\\鹤冲天.zip", "application/x-zip-compressed", "crane.zip");}public ActionResult FilePathDownload3(){ var path = Server.MapPath("~/Files/鹤冲天.zip");  var name = Path.GetFileName(path); return File(path, "application/x-zip-compressed", name);}
- q( W+ C" K( ?. R  k3 o+ v* s1 X' ]9 y4 o% |) d
  咱们能够经过给 fileDownloadName 参数传值来指名资料名,fileDownloadName 1 K' Q  ]  M7 I& D  _( f
; q8 A6 ^# r3 h# q: i/ q3 {  ]7 Q/ f
  无须和磁盘上的资料名一样。键入提醒窗口辨别如次:FilePathDownload2 没成绩,FilePathDownload3 还是默以为了 Action 的名字。缘由是
: C! X/ p7 d; W' F+ D
( A' w9 r$ n" f4 x; |# l  fileDownloadName 将作为 URL 的一全体,只能蕴含 ASCII 码。咱们把 FilePathDownload3 改良一下:3. 对于 fileDownloadName 停止 Url 补码public ActionResult FilePathDownload4(), e+ \- E0 {$ l6 [3 M) ~. I

- a  m3 {4 s: K% V$ G4 |+ d  {
" S/ x1 E0 D2 s" W8 x9 |' u7 g' i. W$ x. O. Y; r0 |% z& g
  var path = Server.MapPath("~/Files/鹤冲天.zip");
" I* j, ]# q, R0 \, I* v) U: w: T( y$ f
  var name = Path.GetFileName(path);* v0 u* V1 U& X0 b
* \+ k* v; v% Q& B' G9 @1 ^8 _
  return File(path, "application/x-zip-compressed", Url.Encode(name));! h, [5 u' W4 N* n& a; a

: j! U" `8 c3 O  }
) P4 y/ c0 j. s- H% X6 [* J+ j5 w% O+ @+ B, E$ I7 ]  A
}

暂时无法加载帖子列表

回复

使用道具 举报

FOSTER 发表于 2026-05-21 15:11:48 | 显示全部楼层
蹲了这么久,终于看到有价值的讨论,支持一下!
回复

使用道具 举报

卟顽正 发表于 2026-09-08 04:43:49 | 显示全部楼层
这个分享太实用了,刚好能用到,感谢楼主!
回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 加入怎通

    本版积分规则

    QQ|手机版|小黑屋|网站地图|真牛社区 ( 苏ICP备2023040716号-2 )

    GMT+8, 2026-9-10 21:17 , Processed in 0.051093 second(s), 25 queries , Gzip On.

    免责声明:本站信息来自互联网,本站不对其内容真实性负责,如有侵权等情况请联系420897364#qq.com(把#换成@)删除。

    Powered by Discuz! X3.5

    快速回复 返回顶部 返回列表