3

我正在关注有关可恢复上传的 Vimeo api 指南 ( https://developer.vimeo.com/api/upload/videos#resumable-tus-upload )。我在第一个请求后收到了响应,但我收到undefined了第二个请求的响应(第 2 步。上传视频文件)。该指南告诉从upload.upload_link 将视频文件的二进制数据PATCH 到URL。我readAsBinaryString()用来将视频文件转换为二进制数据(我也尝试过readAsArrayBuffer()但结果相同。我可能做错了什么?这是代码:

var reader = new FileReader();

$.ajax({
  'url': 'https://api.vimeo.com/me/videos',
  'type': 'POST',
  'headers': {
    'Accept': 'application/vnd.vimeo.*+json;version=3.4',
    'Content-Type': 'application/json',
    'Authorization': 'bearer ' + accessToken
  },
  "data": JSON.stringify({ 
    "upload" : {
      "approach" : "tus",
      "size" : fileSize

    }
  }),
  'success': function (result) {
    $.ajax({
      'url': result.upload.upload_link,
      'type': 'PATCH',
      'headers': {
        'Tus-Resumable': '1.0.0',
        'Upload-Offset': 0,
        'Content-Type': 'application/offset+octet-stream'
      },
      'data': reader.readAsBinaryString(fileContent),
      'success': function (result) {
        console.log(result)
      }
    });
  }
});
4

2 回答 2

0

我现在一直在和它一起工作。我认为当时调用 Patch 时不确定您的文件二进制数据是否已转换,

所以要确保你必须把这个电话放到reader.onload. 所以它肯定是二进制数据。

readAsBinaryString已弃用。所以你可以使用readAsArrayBuffer. 为什么不推荐使用 readAsBinaryString()

于 2020-04-15T06:20:18.813 回答
0

我能够在我的 ReactJs 应用程序中使用它。看起来您缺少 reader.onload() 方法 - https://developer.mozilla.org/en-US/docs/Web/API/FileReader/onload

我将 reader.readAsArrayBuffer 的结果保存到 state.binaryData。然后我将 binaryData 作为数据传递到我的 axios/fetch 请求中。它正在工作,我成功上传了视频。

const reader = new FileReader();
const fileSize = e.target.files[0].size;
reader.onload = r => {
  this.setState({ binaryData: r.target.result, fileSize });
};
reader.readAsArrayBuffer(e.target.files[0]);
于 2018-09-18T02:55:06.130 回答