gpt4 book ai didi

javascript - 使用 javascript 将请求批量上传到 Google Cloud Storage

转载 作者:搜寻专家 更新时间:2023-11-01 04:37:32 58 4
gpt4 key购买 nike

我正在尝试使用 javascript 在批量请求中将多张图片上传到谷歌云存储。我使用 https://developers.google.com/storage/docs/json_api/v1/how-tos/batch#example 作为引用。

我有一个输入文件,用户可以在其中选择多个文件,还有一个“上传”按钮可以像这样上传到 GCS:

<input type="file" name="fileName" id="fileInput" multiple="multiple" onchange="javascript: loadFiles()"/> 
<input type="button" name="upload-btn" id="upload" value="Upload"/>

当用户选择图像时,“loadFiles”函数会创建批处理请求的“主体”。

var tok = <token>;
var boundary = "---======= foo_bar_baz12034245623562346 ===";
var consolidated_request = '';

function loadFiles()
{
var input = $('fileInput');
for (var i = 0; i < input.files.length; i++)
{
var f = input.files[i];

var reader = new FileReader();
reader.readAsBinaryString(f);

reader.onload = function(e){

var fbinary = e.target.result;
var fsize = f.size;

var url = 'https://www.googleapis.com/upload/storage/v1beta2/b/<mybucket>/o?';
url += 'uploadType=media&name='+f.name+ ' HTTP/1.1';

var req = boundary +
'\r\nContent-Type: application/http'+
'\r\nContent-Transfer-Encoding: binary'+
'\r\n\nPOST ' + url +
'\r\nContent-Type: image/jpeg'+
'\r\nContent-Length: '+ f.size +
'\r\nAuthorization: '+tok+
'\r\n\n'+ fbinary + '\n';

consolidated_request += req;
};

}
}

当用户点击上传时:

$('upload').onclick = function(e){

var xhr = new XMLHttpRequest();
xhr.open("POST", 'https://www.googleapis.com/batch', true);
xhr.setRequestHeader("Authorization", tok);
xhr.setRequestHeader("Content-Type", "multipart/mixed;boundary=" + boundary);
xhr.send(consolidated_request);
};

这是生成的 POST 示例(使用 firebug):

标题:

Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Authorization Bearer ya29.AHES6ZQgu6gFurD6y7Bo2Mao1RNCFwyqNZcwvgDZ82RXIbQ4
Content-Length 159866
Content-Type multipart/mixed; charset=UTF-8;boundary=---======= foo_bar_baz12034245623562346 ===
Host www.googleapis.com

正文:

 --======= foo_bar_baz12034245623562346 === 
Content-Type: application/http
Content-Transfer-Encoding: binary

POST https://www.googleapis.com/upload/storage/v1beta2/b/<mybucket>/o?uploadType=media&name=myimage.jpg HTTP/1.1
Content-Type: image/jpeg
Content-Length: 69436
Authorization: Bearer ya29.AHES6ZQgu6gFurD6y7Bo2Mao1RNCFwyqNZcwvgDZ82RXIbQ4

ÿØÿà�JFIF���d�d��ÿì�Ducky�����<��ÿî�Adobe�dÀ���ÿÛ��
...

问题是没有响应,因为我收到 400 条错误的请求消息。该请求有什么问题?

最佳答案

您正在发送 POST 请求 -

POST https://www.googleapis.com/upload/storage/v1beta2/b/<mybucket>/o?uploadType=media&name=myimage.jpg HTTP/1.1 

upload objects with POST request 中所述-

要上传媒体,您可以使用特殊的 URI。支持媒体上传的 POST 方法有两个 URI 端点:

  1. 媒体的/upload URI。上传端点的格式是带有 “/upload” 前缀的标准资源 URI。传输媒体数据本身时使用此 URI。示例:POST/upload/storage/v1beta2/b/myBucket/o
  2. 标准资源 URI,用于元数据。如果资源包含任何数据字段,则这些字段用于存储描述上传文件的元数据。您可以在创建或更新元数据值时使用此 URI。示例:POST/storage/v1beta2/b/myBucket/o。

所以你需要发送 POST 请求为 -

POST/upload/storage/v1beta2/b/myBucket/o?uploadType=media&name=myimage.jpg HTTP/1.1

尝试通过从 url 中省略前缀 https://www.googleapis.com 来发送 POST 请求。

谢谢

尼拉姆夏尔马

关于javascript - 使用 javascript 将请求批量上传到 Google Cloud Storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17746363/

58 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com