【发布时间】:2017-06-01 10:47:15
【问题描述】:
我正在尝试在 Angular 2 中将文件上传到 Google 云端硬盘。到目前为止,我可以上传文件,但没有 title 并且它们是“无标题”
这是执行此操作的代码:
gDriveUploader(file): Promise<any> {
let authToken = tokenHere;
const url = `https://www.googleapis.com/upload/drive/v2/files/`
let formData:FormData = new FormData();
formData.append('title', file, file.name);
let headers = new Headers({
'Authorization': 'Bearer ' + authToken
});
headers.append('Accept', file.type);
let options = new RequestOptions ({
headers: headers,
});
console.log('OPTIONS: ', options)
return this.http.post(`${url}`, formData, options)
.toPromise()
.then(response => response.json())
.catch(e=>console.log(e));
}
我知道,为了将元数据与文件一起发送,我必须将此元数据添加到 Request 正文并使用 multipart 或 resumable 上传类型。但是在这里我遇到了一个又一个问题,只是无法正常解决。
我完全搞砸了。这是我使用resumable上传类型的方法:
gDriveUploader(file): Promise<any> {
let authToken = token;
const url = `https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable`
console.log('FILE TO UPLOAD: ', file)
let formData:FormData = new FormData();
formData.append('name', file, file.name);
let headers = new Headers({
'Authorization': 'Bearer ' + authToken,
'Content-Type': 'application/json; charset=UTF-8', //if remove "Bad Content" Error
//'Content-Length': file.size, not sure if this one right?
});
let options = new RequestOptions ({
headers: headers,
});
return this.http.post(`${url}`, formData, options)
.toPromise()
.then(response => response.json())
.catch(e=>console.log(e));
}
这不仅仅是我的两种方法......
根据 Drive API for resumable 上传:
POST https://www.googleapis.com/drive/v3/files?uploadType=resumable
HTTP/1.1
Authorization: Bearer [YOUR_AUTH_TOKEN]
Content-Length: 38
Content-Type: application/json; charset=UTF-8
X-Upload-Content-Type: image/jpeg
X-Upload-Content-Length: 2000000
Content-Length: 38 是什么?这是文件长度,我可以使用file.size?
对于multipart,我不知道如何在请求中添加这些边界分隔符。
我看到了一些 Q 和 A,multipart 不受 Angular 支持,但那是 1-2 年前的事了。现在呢?
我可以使用标准 Angular 功能以某种方式使用可恢复上传到 GDrive 以及其他文件元数据吗?
【问题讨论】:
标签: javascript angular typescript google-drive-api