今天遇到處理之前案子的問題,這個問題是無法將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),會在應用程式未模擬的情況下使用。......
沒有留言:
張貼留言