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

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

[复制链接]
杨莹莹连 发表于 2013-11-08 11:39:39 | 显示全部楼层 |阅读模式
  正在 Controller 中咱们能够运用 FileResult 向存户端发送资料。  h3 h, o7 b- i7 X5 `9 W6 P& E
3 `& l0 y) d) B8 s6 c
  FileResult
/ r6 e; f# R3 x. {' \4 ~, j% k5 T/ H: J- ~: a& ~! Z
  FileResult 是一度形象类,承继自 ActionResult。正在 System.Web.Mvc.dll 中,它有如上三个子类,辨别以没有同的形式向存户端发送资料。
* L9 m* t6 r: a4 Z* y
5 G, T$ ~  O) v% P/ K5 t  正在实践运用中咱们一般没有需求间接范例化一度 FileResult 的子类,由于 Controller 类曾经需要了六个 File 办法来简化咱们的操作:! \/ S1 K( u) D1 Z5 K4 e0 r6 z
$ D7 W% ~9 r# ]2 d1 C+ K% ?
  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);
% ~. C: o' `$ L0 k0 _: n# W1 Q- ]# k/ p- x% r* O- L
  FilePathResult: e$ p0 ~: l! w8 X0 W$ T( P( A
* f3 W9 i3 [9 N. \- d2 n: k4 n2 S
  FilePathResult 间接将磁盘上的资料发送至阅读器:
& h3 \6 C8 K$ a
1 |% E& c/ n- E7 n- j- k  1. 最容易的形式
) n) n) L1 o- b. ~: Q7 d/ Z( {: d6 {% B: c: R
  public ActionResult FilePathDownload1(){ var path = Server.MapPath("~/Files/鹤冲天.zip"); return File(path, "application/x-zip-compressed");
% _; {  B: g" C$ e/ w! A. e' E* N; }" e  c% W1 n, g9 ]  _
  第一度参数指名资料门路,第二个参数指名资料的 MIME 类型。用户点击阅读器上的键入链接后,会调出键入窗口:' |' P' Z( ?: u0 {' z. O9 [
! o1 Z( T9 ], k# W/ H1 A
  自己该当留意到,资料称号会成为 Download1.zip,默许成了 Action 的名字。咱们运用 File 办法的第二个重载来处理资料名的成绩:
1 |3 Y6 j; q& t" V" a! b$ I( V5 t! h+ x
  2. 指名 fileDownloadName* h6 F) Y6 t& v: l9 m
+ \& U# K7 C# n) H( S
  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);}% H/ y& c+ S2 r' k; H' j/ ^) D9 l
: K0 f' k+ V7 N, O& x* j0 \
  咱们能够经过给 fileDownloadName 参数传值来指名资料名,fileDownloadName / Z8 |& P, ~0 [- Y/ y1 h

3 k& Z- C0 H2 S  无须和磁盘上的资料名一样。键入提醒窗口辨别如次:FilePathDownload2 没成绩,FilePathDownload3 还是默以为了 Action 的名字。缘由是 * h4 k5 `9 j( w- L: A% a) x' i

# i8 x& z: Z0 }6 e+ \  fileDownloadName 将作为 URL 的一全体,只能蕴含 ASCII 码。咱们把 FilePathDownload3 改良一下:3. 对于 fileDownloadName 停止 Url 补码public ActionResult FilePathDownload4()* n- F1 X+ i3 ^, n
% u7 L6 ?# _  e! x; N" z
  {
3 c5 f& F0 _9 ~; I/ _, X( Q* L! N4 ^9 I
  var path = Server.MapPath("~/Files/鹤冲天.zip");; u2 P( K# s$ z9 ?  `0 p$ }- @  Y

5 l1 Z% h2 T+ f9 b: _8 A; g  var name = Path.GetFileName(path);8 w( d2 u8 `6 u, C0 S/ [! ?9 g
* Z" F" f; R! M2 j
  return File(path, "application/x-zip-compressed", Url.Encode(name));5 ^- \: X& i, _. E2 b) n* z2 E  ?

0 N1 u+ D+ J7 u/ K& ^: M  b  }! ]: N. K, p, G. T
( D( R! x; b7 A6 C4 Y  @" n
}

暂时无法加载帖子列表

回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

    本版积分规则

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

    GMT+8, 2026-9-12 16:29 , Processed in 0.054860 second(s), 52 queries , Gzip On.

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

    Powered by Discuz! X3.5

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