正在 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
} |