将 Web API blob 读取为字符串,我可以将其作为 JSON 对象的一部分发送到服务器并转回文件
本文关键字:一部分 文件 服务器 回文 JSON 读取 blob API Web 字符串 我可以 | 更新日期: 2023-09-27 18:32:25
我正在尝试将 wav 文件转换为我可以作为 json 对象的一部分发送到服务器的字符串,以便在服务器上我可以将该字符串转回文件。
我尝试使用 readAsBinaryString 并读取为文本,无法在将字符串读取到字节数组时出现错误。
reader.onloadend = saveMedia;
reader.readAsText(Blob);
//reader.readAsBinaryString(Blob); also tried.
然后回调发送一个 ajax 请求,其中包含一个在"reader.result"中保存字符串的对象,在服务器上我尝试了如下操作:
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] BinaryData = encoding.GetBytes(stringFromRequest);
下面对这个问题的答案似乎是不应该这样做。 但我真的很想这样做,因为我正在使用另一个工具(breeze js)。 不想对文件数据类型使用单独的发布操作。
已转载:文件 API - Blob 到 JSON
找到了一种工作的方法:
var reader = new FileReader();
reader.onloadend = afterRead;
reader.readAsBinaryString(blob);
function afterRead() {
// convert binary string to base64 for a safe transfer to the server.
entity.BinaryProp = window.btoa(reader.result);
}
在服务器端:
string BinaryString = (string)entityInfo.UnmappedValuesMap["BinaryProp"];
byte[] BinaryData = Convert.FromBase64String(BinaryString);
您可以使用
fileReader.readAsDataURL(fileObject)
,这会将blob编码为base64,可以通过API安全地上传到服务器。
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = () => {
let thumbnail = reader.result;
console.log(thumbnail)
//send to API
};
上面的答案很好,但有一种更简单的方法。
var reader = new FileReader();
reader.onloadend = afterRead;
reader.readAsDataURL(blob); // Use this function instead
function afterRead() {
entity.BinaryProp = reader.result; //result is already a base64 string!
}
请参阅此处的文档:FileReader.readAsDataURL()