我确实设法使用 GCP 可恢复上传(json api)将文件上传到 Google 存储:
https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload
使用 jQuery 和 Plupload http://www.plupload.com
但是现在看来,音频文件在上传时会丢失它们的编解码器,并且那些不会播放或 ffmpeg 无法探测那些。更多测试表明,实际上 .flac 文件对 ffmpeg 是可以的,但例如 .m4a 文件就不行。
我需要将大部分音频文件上传到谷歌存储,并能够使用 ffmpeg 探测这些文件。并且必须能够上传超过 100Mb 的大文件。这就是为什么我相信 JSON API 是最好的或唯一可能的方式。
我想我也正确添加了元数据,但现在我很困惑如何继续..
有什么想法可能是这里的问题吗?
编辑(更多信息):
我有工作软件:
然后发生了一些事情,我想像这样的上传是有限的(或什么):
现在:
--
如果我能得到如何解决这个问题的帮助,我将不胜感激。
我想一个解决方案可能是 fork ffmpeg 客户端并手动设置音频编解码器,但我将其保存为最后一个解决方案。
最佳答案
1. 对 Google json API 的 POST 请求必须完全如 Google docs 所说
(例如:https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload)
最后我使它与这个问题的答案一起工作:
Upload file to Google cloud storage from Google App Engine (Java)
感谢用户https://stackoverflow.com/users/3371862/renaud-t
function uploadFile(fileData, bucket) {
var boundary = '-------314159265358979323846';
var delimiter = "\r\n--" + boundary + "\r\n";
var close_delim = "\r\n--" + boundary + "--";
var reader = new FileReader();
reader.readAsBinaryString(fileData);
reader.onload = function (e) {
var contentType = fileData.type || 'application/octet-stream';
var metadata = {
'name': fileData.name,
'mimeType': contentType
};
var base64Data = btoa(reader.result);
var multipartRequestBody =
delimiter +
'Content-Type: application/json\r\n\r\n' +
JSON.stringify(metadata) +
delimiter +
'Content-Type: ' + contentType + '\r\n' +
'Content-Transfer-Encoding: base64\r\n' +
'\r\n' +
base64Data +
close_delim;
var request = gapi.client.request({
'path': '/upload/storage/v1/b/' + bucket + '/o',
'method': 'POST',
'params': {'uploadType': 'multipart'},
'headers': {
'Content-Type': 'multipart/mixed; boundary="' + boundary + '"'
},
'body': multipartRequestBody
});
try {
request.execute(function (resp) {
if (resp.hasOwnProperty("error")) {
//Treat Error
} else {
//Treat Success
}
});
}
catch (e) {
//Treat Error
}
};
}
2.使用谷歌API客户端库Javascript
https://developers.google.com/api-client-library/javascript/start/start-js
GAPI 客户端指南说您应该使用“then”方法,所以我稍微更改了上面的代码。
var request = gapi.client.request({
'path': url,
'method': 'POST',
'params': {'uploadType': 'multipart'},
'headers': {
'Content-Type': 'multipart/mixed; boundary="' + boundary + '"'
},
'body': multipartRequestBody
}).then(function(response) {
// Handle response
}, function(reason) {
// Handle error
}
);
关于javascript - 谷歌云平台存储 JSON API 上传会破坏音频文件..?!怎么修?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46178999/