Запись файла из данных base64 на странице ASPX с кодом C # позади - PullRequest
1 голос
/ 15 июля 2011

Я пытаюсь взять зашифрованную версию base64 файла, расшифровать его и записать файл на сервер.Я не могу понять, почему этот код не работает, и любая помощь будет признательна, так как сейчас я получаю сообщение об ошибке: File Not Found.Вот мой код:

<%@ 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>

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Я понял, мне нужно было сделать локальный каталог из wwwroot, так как каталоги, созданные в конструкторе sharepoint, не были физическими, вот код.

<%@ 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 голос
/ 22 февраля 2012

Вы также можете полностью исключить временный файл.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...