2011-07-14 54 views
1

我試圖採取base64加密版本的文件,解密它,並將文件寫入服務器。我無法弄清楚爲什麼這個代碼不工作,任何幫助將不勝感激,截至目前,我得到的錯誤:File Not Found。這裏是我的代碼:從ASP64頁面中的base64數據寫入文件與C#代碼後面

<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Web" %> 
<%@ Import Namespace="System.IO" %> 
<script runat="server"> 
    public void Page_Load(object sender, EventArgs e){ 
    HttpContext c = HttpContext.Current; 
    //string data = Decode(c.Request["file"]); 
    //string name = c.Request["name"]; 
    string name = "target.docx"; 
    string data = Decode("SUPER LONG BASE 64, DIDNT POST BECAUSE WAY TOO LARGE"); 
    StreamWriter writer = File.CreateText(Server.MapPath("~/services/temp/"+name)); 
    // Error generated here, after previous line. 
    writer.WriteLine(data); 
    writer.Close(); 
    Response.Redirect("temp/"+name); 
    } 
    public string Decode(string str){ 
    byte[] decbuff = Convert.FromBase64String(str); 
    return System.Text.Encoding.UTF8.GetString(decbuff); 
    } 
</script> 
+0

它是真的創建文件,但不重定向到它?或者它甚至不創建文件? – Icemanind

+0

什麼是thr thr?在這裏檢查File.CreateText的引發http://msdn.microsoft.com/en-us/library/system.io.file.createtext.aspx – Aristos

+0

@icemanind,它甚至不創建該文件。 @Aristos,明天我會檢查一下。 – Vap0r

回答

2

我想通了,我需要做的本地目錄關閉wwwroot文件的,因爲在SharePoint Designer創建的目錄中並沒有身體,這裏是代碼。

<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Web" %> 
<%@ Import Namespace="System.IO" %> 
<script runat="server"> 
    public void Page_Load(object sender, EventArgs e){ 
    HttpContext c = HttpContext.Current; 
    //string data = Decode(c.Request["file"]); 
    //string name = c.Request["name"]; 
    Response.Write(Server.MapPath("/temp/hurrdurr.txt")); 
    string name = "target.docx"; 
    string data = "THE GIANT BASE 64 DATA"; 
    using(StreamWriter writer = new StreamWriter(Server.MapPath("/temp/"+name), true)){ 
     writer.WriteLine(Decode(data)); 
     writer.Close(); 
    } 
    FileStream fs = File.Open(Server.MapPath("/temp/"+name), FileMode.Open); 
    byte[] file = new byte[fs.Length]; 
    fs.Read(file, 0, Convert.ToInt32(fs.Length)); 
    fs.Close(); 
    Response.AddHeader("Content-disposition", "attachment; filename=" + name); 
    Response.ContentType = "application/octet-stream"; 
    Response.BinaryWrite(file); 
    Response.End(); 
    } 
    public string Decode(string str){ 
    byte[] decbuff = Convert.FromBase64String(str); 
    return System.Text.Encoding.UTF8.GetString(decbuff); 
    } 
</script> 
1

您還可以避免臨時文件完全。

string sName = "target.docx"; 
string sBase64 = "THE GIANT BASE 64 DATA";   
Response.AddHeader("Content-disposition", "attachment; filename=" + sName); 
Response.ContentType = "application/octet-stream"; 
Response.BinaryWrite(System.Convert.FromBase64String(sBase64)); 
Response.End(); 
相關問題