cam*_*seD 4 javascript google-cloud-storage
我想知道使用 javascript 客户端时是否可以跟踪文件上传到谷歌云存储的进度?因为我有一个进度条,我想向用户显示到目前为止已经上传了多少文件。
我使用谷歌在其示例页面上提供的相同上传代码进行文件上传。
我没有使用gapi.client.requestjs 库提供的 api,而是XMLHttpRequest为该事件创建并附加了一个事件监听器progress。如下所示:
const boundary = '-------314159265358979323846';
const delimiter = "\r\n--" + boundary + "\r\n";
const 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': 'testing',
'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;
gapi.client.request()
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.googleapis.com/upload/storage/v1/b/bucket/o?uploadType=multipart&key=apiKey&alt=json', true);
xhr.setRequestHeader('Content-Type', 'multipart/mixed; boundary="' + boundary + '"');
xhr.setRequestHeader('authorization', 'Bearer ' + gapi.auth.getToken().access_token);
xhr.upload.addEventListener("progress", function(e) {
var pc = parseFloat(e.loaded / e.total * 100).toFixed(2);
}, false);
xhr.onreadystatechange = function(e) {
if (xhr.readyState == 4) {
console.log(xhr.responseText);
}
};
xhr.send(multipartRequestBody);
Run Code Online (Sandbox Code Playgroud)
归属:大部分代码取自 Google 的 js 库,唯一添加的是用于监听上传进度的事件监听器。
| 归档时间: |
|
| 查看次数: |
5283 次 |
| 最近记录: |