Tôi đang cố gắng theo dõi this hướng dẫn để tải lên lại có thể tiếp tục trên Google Drive thông qua Google Api.Cách tải tệp lên Google bằng cách sử dụng gapi và tải lên có thể tiếp tục lại?
Đây là mã của tôi, bạn có thể thấy nó yêu cầu 2 yêu cầu làm hướng dẫn yêu cầu, phần đầu tiên tạo siêu dữ liệu và sau đó chúng tôi sử dụng vị trí để bắt đầu tải lên tệp với phiên được tạo bởi yêu cầu đầu tiên.
const file = new File(['Hello, world!'], 'hello world.txt', { type: 'text/plain;charset=utf-8' });
const contentType = file.type || 'application/octet-stream';
const reqMetadata = gapi.client.request({
'path': 'upload/drive/v3/files',
'method': 'POST',
'params': { 'uploadType': 'resumable' },
'headers': {
'X-Upload-Content-Type': file.type,
'X-Upload-Content-Length': file.size,
'Content-Type': 'application/json; charset=UTF-8'
},
'body': {
'name': file.name,
'mimeType': contentType,
'Content-Type': contentType,
'Content-Length': file.size
}
});
reqMetadata.execute((respMetadata, rawRespMetadata: any) => {
const locationUrl = JSON.parse(rawRespMetadata).gapiRequest.data.headers.location;
const reader = new FileReader();
reader.onload = (e) => {
const reqFile = gapi.client.request({
'path': locationUrl,
'method': 'PUT',
'headers': {
'Content-Type': file.type,
'Content-Length': file.size
},
'body': reader.result
});
reqFile.execute(respFile => {
console.log(respFile);
});
};
reader.readAsArrayBuffer(file);
});
Sự cố là gì?
Vâng, có vẻ như các thư viện Google Api không thích mảng File/byte như cơ thể trên gapi.client.request của họ và họ đang cắt bỏ nó đi
cách chính xác để vượt qua các tập tin là gì? Tôi đã thử cả nội dung: tệp và nội dung: reader.result nhưng cùng một kết quả
PS: gapi đã được xác thực hoàn toàn & được khởi tạo với auth2, tôi có thể tạo tệp/thư mục.
EDIT 1:
thư viện GAPI chỉ là jsoing các FileArray, do đó chức năng JSON sẽ thay đổi nó vào một đối tượng rỗng, không có cách nào để làm cho nó làm việc .. một cái gì đó phải được thiếu.
EDIT 2:
tôi đã làm cho nó làm việc mà không có sự GAPI, nó tải lên một cách chính xác các tập tin nhưng tôi có một số vấn đề với CORS
reader.onload = (e) => {
const authHeader = `Bearer ${this.auth.currentUser.get().getAuthResponse().access_token}`;
const headers = new Headers({
'Authorization': authHeader,
'Content-Type': file.type
});
const options = new RequestOptions({ headers });
const url = locationUrl;
this.http.put(url, reader.result, options).subscribe(res => {
observer.next(res);
}, (err) => {
observer.next({});
});
};
reader.readAsArrayBuffer(file);
Nếu ai đó có một số gợi ý ..
Bạn đang sử dụng phiên bản GAPI nào? Ngoài ra, GAPI dường như đang sử dụng sreams để tải lên ifles trong NodeJS. Bạn có thể thử với [this] (https://github.com/dominictarr/browser-stream) –
Nên là phiên bản mới nhất, bạn đã tìm thấy tài liệu nào về việc sử dụng luồng (ổ cắm)? –
[Ở đây] (https://developers.google.com/drive/v3/web/manage-uploads), xem các ví dụ về NodeJS. –