我花了很多时间尝试使用客户端 ajax 请求 (vue-dropzone.js) 将文件上传到 b2,即使我提供了文件的有效 sha1 校验和,b2 服务器仍然响应“校验和与收到的数据不匹配” " 状态码为 400。我已经使用我拥有的所有工具检查并重新检查了校验和,但我仍然无法追踪错误的来源。就好像文件在传输过程中发生了什么事情一样。
我已经使用命令行工具上传了相同的文件,它工作正常,但是当我使用完全相同的 sha1 校验和通过 ajax 上传时,它不起作用。
我的问题是:
b2 甚至允许通过 ajax 上传文件吗?
如果它确实允许通过 ajax 上传,那么我做错了什么?
使用“X-Bz-Content-Sha1”、“do_not_verify”上传时文件是否仍然有效。因为我已经尝试过,只是在我下载回来时获取无效文件。
关于使用 ajax 请求将文件上传到 b2,我还需要了解其他信息吗
请查看我的 ajax 代码,看看我是否有任何问题:
sending(file, xhr, formData) {
// This function runs for each file right before they are sent by dropezone.
// This is a good opportunity to insert file specific values
// in this case the file's upload url, name and auth token
let fileName = '';
console.log('this is file type', file.type);
if (file.type.includes('image')) {
fileName = 'images/${uuid.v1()}.png';
} else if (file.type.includes('video')) {
fileName = 'videos/${uuid.v1()}.${file.type.split(' / ')[1]}';
}
const url = appConfig.serverAddress + '/catalog/submitFiles';
console.log('this is sha1_hash', this.uploadInfo.sha1_hash);
// open the xhr request and insert the file's upload url here
xhr.open('Post', this.uploadInfo.url, true);
// set b2's mandatory request headers
// xhr.setRequestHeader(
// 'Authorization',
// 'Bearer ' + store.getters.getUserIdToken,
// );
xhr.setRequestHeader('Authorization', this.uploadInfo.authorizationToken);
xhr.setRequestHeader('X-Bz-Content-Sha1', this.uploadInfo.sha1_hash);
xhr.setRequestHeader('X-Bz-File-Name', fileName);
xhr.setRequestHeader('Content-Type', 'b2/x-auto');
formData = new FormData();
formData.append('files', file);
// the rest will be handled by dropzones upload pipeline
}