Con il seguente codice sono in grado di caricare il mio bucket pubblicamente scrivibile in Google Cloud Storage. (tutti gli utenti hanno il permesso di scrittura). Tuttavia se il bucket non è pubblicamente scrivibile, ricevo un errore 401 non autorizzato. (Non voglio che il bucket sia pubblicamente scrivibile).caricare su URL di archiviazione google cloud firmato con 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": "[email protected]account.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);
})
}
È possibile utilizzare URL registrati con il client gapi javascript? O non capisce i parametri.
In caso contrario: esistono esempi di CORS con l'API JSON da javascript per il caricamento con URL firmati?
(lascia supporre che la mia scadenza, GoogleAccessId & Firma siano corrette & partita quello che sto facendo in JavaScript & i permessi Ho installato sul secchio)
Fondamentalmente ci sono esempi di caricamento su archiviazione su cloud di google da client javascript da localhost senza richiedere all'utente di avere un account google & senza utilizzare un bucket pubblicamente scrivibile ma utilizzando gli URL firmati dispensati?
Ciao Robert, ho cercato la stessa cosa. Sei riuscito a farlo alla fine? – Alex
Penso di aver mollato e provato qualcos'altro e poi ho scoperto che il mio URL firmato era sbagliato da sempre, quindi probabilmente avrebbe funzionato se avessi firmato correttamente il mio url. Puoi usare gcutil per creare un url corretto e provarlo. –
L'ho generato con gsutil, ma non puoi usarlo con/upload/storage/v1, devi inviare una richiesta PUT che non è riuscita a causa delle politiche CORP, quindi ho rinunciato e ho reso pubblico il bucket per adesso. – Alex