将 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

将 Web 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()