Za pomocą następującego kodu mogę przesłać do mojego publicznie zapisywalnego zasobnika w chmurze Google Cloud Storage. (allUsers ma uprawnienia do zapisu). Jednak jeśli wiadro nie jest publicznie zapisywalne, otrzymuję 401 nieautoryzowany błąd. (Nie chcę, żeby wiadro było publicznie zapisywane).przesłać do podpisanego adresu URL w chmurze do zapisywania w chmurze za pomocą javascript
var file = $scope.myFile;
var fileData = file;
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': 'objectName', //'lol' + 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 stuff = angular.fromJson('{"Expires": "1415344534", "GoogleAccessId": "3940[email protected]unt.com", "Signature": "AMkhO7mt2zg+s1Dzx28yQIMSrZlDC2Xx1SzvMCAgUVyiLXs5890/nA6PKzoc1KYBcRv/ALmkNaEVhvWHxE0EfcE151c0PYSG9x7AeSpQI/3dB1UPcSqpwilS1e2sgwB9piLNvBEXLNRXiLYyTiH22zkFZHAEQonJ3J25a47fwo4="}');
var Expires = stuff.Expires;
var GoogleAccessId = stuff.GoogleAccessId;
var Signature = encodeURIComponent(stuff.Signature);
var BUCKET = 'mybucket';
var request = $window.gapi.client.request({
'path': '/upload/storage/v1/b/' + BUCKET + '/o',
'method': 'POST',
'params': {
'uploadType': 'multipart',
'Expires': Expires,
'GoogleAccessId': GoogleAccessId,
'Signature': Signature
},
'headers': {
'Content-Type': 'multipart/mixed; boundary="' + boundary + '"'
},
'body': multipartRequestBody});
request.execute(function(r) {
console.log(r);
})
}
Czy można używać podpisanych adresów URL z klientem javascript gapi? Czy też nie rozumie params.
Jeśli nie - czy istnieją przykłady robienia CORS z api JSON z javascript do przesłania z podpisanymi adresami URL?
(pozwala zakładać, że mój wygaśnięcia GoogleAccessId & Podpis są poprawne & mecz co robię w javascript & uprawnieniami Wcześniej skonfigurować na wiadrze)
zasadzie są jakieś przykłady wysłaniem do google przechowywania w chmurze z klienta javascript z lokalnego hosta bez konieczności posiadania konta Google & bez korzystania z publicznie zapisywalnego zasobnika, ale z użyciem dystrybuowanych adresów URL?
Witam Robert, szukałem tego samego. Czy udało ci się to zrobić w końcu? – Alex
Wydaje mi się, że zrezygnowałem i próbowałem czegoś innego, a potem dowiedziałem się, że mój podpisany adres URL był przez cały czas błędny - prawdopodobnie zadziałałby, gdybym poprawnie podpisał mój adres URL. Możesz użyć gcutil, aby stworzyć poprawny adres URL i spróbować. –
Zrobiłem to za pomocą gsutil, ale nie możesz go użyć z/upload/storage/v1, musisz wysłać żądanie PUT, które mi się nie udało z powodu zasad CORP, więc zrezygnowałem i właśnie upubliczniłem wiadro dla teraz. – Alex