網頁

搜尋此網誌

2009年5月5日 星期二

Content-Disposition強制下載檔案

最近沒有更新部落格,因為忙著論文,東弄西弄簡直快發散(diverge)掉了,還好,目前總算有點收斂(converge)...趕快來部落格除草一下。

今天遇到處理之前案子的問題,這個問題是無法將GIF儲存為GIF,話說使用者用InternetExplorer只能儲存為BMP檔,解決這個問題的方式可以用HTTP的header強制瀏覽器儲存檔案,請參考:http://blog.miniasp.com/post/2008/04/ASPNET-Force-Download-File-and-deal-with-Chinese-Filename-correctly.aspx

還好之前已經用過這個方法,順便修改一下,於是完成一個簡單的ASP.NET網頁。檔名為download.aspx

程式碼
<%@ Page Language="C#" %>

<%@ Import Namespace="System.IO" %>
<%
string path = Request.MapPath(".");//實體位置
FileInfo thisFile = new FileInfo(path + "\\" + Request.Params["i"]);

if (thisFile.Exists)//如果檔案存在,則讀取輸出
{
FileStream thisFileStream = new FileStream(thisFile.FullName, FileMode.Open);
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + Request.Params["i"] + "\";");
Response.ContentType = "image/"+thisFile.Extension;
Response.Clear();

byte[] data = new byte[thisFileStream.Length];
thisFileStream.Read(data, 0, (int)thisFileStream.Length);
Response.BinaryWrite(data);
Response.End();
}
else
{%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server"></script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<p>
檔案不存在</p>
</body>
</html>
<%
}
%>


寫的有點爛,很多沒有考慮更周全,至少功能有啦!

使用方式是
將download.aspx放置到圖片相同的位置
超連結改為download.aspx?i=xxx.gif,後面的 xxx.gif是圖片檔名,其實是將原本的超連結加上"download.aspx?i=",利用get的變數去讀取檔案丟出來。

另外,圖片檔案的權限要設定,不然會發生:沒有授權 ASP.NET 存取要求的資源。請考慮將資源存取權授與 ASP.NET 要求識別。ASP.NET 有一個基本處理序識別 (通常在 IIS 5 上為 {MACHINE}\ASPNET,在 IIS 6 上為 Network Service),會在應用程式未模擬的情況下使用。......

沒有留言:

張貼留言

熱門文章