2

我正在尝试将 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

4

3 回答 3

4

找到了一种可行的方法:

  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);  
于 2013-09-23T03:35:10.740 回答
1

您可以使用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
};
于 2019-06-26T05:42:11.467 回答
0

上面的答案很好,但是有一个更简单的方法。

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

于 2017-04-12T19:42:11.580 回答