如何将数据 URL 格式的文件正确保存到隔离存储

本文关键字:确保 保存 存储 隔离 文件 数据 URL 格式 | 更新日期: 2023-09-27 18:34:13

我正在尝试将文件从浏览器上传到 asp.NET 服务。我正在使用FileReader.readAsDataURL()并将文件作为数据 URL 获取。

我使用此 JavaScript 代码event.target.result.match(/,(.*)$/)[1]仅获取 base64 格式的文件。这是我发送给服务的内容。

使用下面的代码,我将文件存储在独立存储中

IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(
     IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
byte[] byteArray = Convert.FromBase64String(data);                    
IsolatedStorageFileStream stream = new IsolatedStorageFileStream("myfile", 
      FileMode.Create, isoStore);
StreamWriter writer = new StreamWriter(stream);
writer.Write(byteArray);
writer.Close();

不幸的是,我保存的文件已损坏。我做错了什么吗?有没有更好的方法可以做到这一点?

编辑:我正在尝试实现Gmail风格的文件上传。我尝试过表格,但它使事情复杂化了很多。

我的 ajax 调用如下所示:

var query = {
    "data": fileData,
    "fileName": fileName
};
$.ajax({
    type: "POST",
    url: "Page.aspx/UploadFile",
    data: JSON.stringify(query),
    contentType: "application/json; charset=utf-8",
    dataType: "JSON"});

它是否与 UTF-8 编码有关?

如何将数据 URL 格式的文件正确保存到隔离存储

问题是我写错了数据。您不需要StreamWriter来写入数据。 IsolatedStorageFileStream就足够了。所以代码应该是:

IsolatedStorageFile isoStore = IsolatedStorageFile.GetStore(
      IsolatedStorageScope.User | IsolatedStorageScope.Assembly, null, null);
byte[] byteArray = Convert.FromBase64String(data);                    
IsolatedStorageFileStream stream = new IsolatedStorageFileStream("myfile", 
      FileMode.Create, isoStore);
stream.Write(byteArray, 0, byteArray.Length);
stream.Close();