如何将数据 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 编码有关?
问题是我写错了数据。您不需要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();