当前位置: 首页 > 知识库问答 >
问题:

使用ajax将文件通过签名url上传到google cloud storage

陈嘉荣
2023-03-14

我尝试使用签名URL将文件上传到我的谷歌云存储。

  • 我已经使用gsutil在我的bucket上设置了CORS参数
  • 浏览器向Django后端发送ajax请求以获取签名URL
  • Django后端向GCS发出请求,以便创建签名URL
  • 签名的url将发送回浏览器。
  • 我尝试在Ajax中使用此签名url将视频文件(内容类型=“video/mp4”)上载到GCS
  • 对GCS返回状态代码200
  • 的请求
  • 最后但并非最不重要的是,在我的桶中创建了一个空文件...

如何防止上载空文件?
我在GCS文档和stackoverflow上都没有看到什么是错误的

function ajaxSendToStorage(url, file, row){
  $.ajax({
    method: 'PUT',
    dataType: "xml",
    contentType: file.type,
    crossDomain: true,
    data: file,
    url: url,
    beforeSend: function (request){
        request.setRequestHeader("Content-Type", 'multipart/formdata; charset=UTF-8');
    },
    success: function(data) {
        storageLoadComplete(row)
    },
    complete: function() {
        // do something when complete
    },
  });
}

共有1个答案

司寇照
2023-03-14

好吧。我解决了。我没有正确绑定文件,并且我正在发送一个空对象。它现在工作了,但是我必须添加一行,因为我得到一个“非法调用错误”。
我必须添加processData:false,,现在它工作得很好。

这是代码;如果能帮上忙...

function ajaxSendToStorage(url, uuid, row){
var file = getFileById(uuid);
$.ajax({
    method: "PUT",
    contentType: file.type,
    processData: false,
    dataType: "xml",
    crossDomain: true,
    data: file,
    url: url,
    beforeSend: function (request){
        request.setRequestHeader("Content-Type", 'multipart/formdata; charset=UTF-8');
    },
    success: function(data) {
        storageLoadComplete(row)
    },
    complete: function() {
        var a = 1;
    },

});

}

 类似资料:
  • 这里是我的node.js预签名URL的生成 那么我在URL生成或卷曲方面的问题在哪里呢?谢谢

  • 问题内容: 我正在尝试使用预签名的URL将文件上传到Amazon的S3。我从生成URL的服务器获取URL,并将其作为JSON对象的一部分发送给我。我将URL作为字符串获取,如下所示: https://com-example-mysite.s3-us- east-1.amazonaws.com/userFolder/ImageName?X-Amz-Security- Token=xxfooxx%2F

  • 我正试图通过一个预先签名的URL将一个文件上传到Amazon S3 bucket,这是我从第三个服务获得的。意思是,我没有生成这个URL。我已经阅读了AWS文档,但我不能把它们全部放在一起。这就是我指的。 预选。php 目前,我的代码是这样的。请注意,

  • 问题内容: 我使用2个文件index.js,upload.php尝试通过ajax上传文件(img),如果成功追加到div 。 但是它不起作用,有几个问题,下面我的代码有什么建议吗? 谢谢。 upload.php 1. 还需要添加吗? 2. 并检查$ _FILES的大小或tmp_name是否仍使用? index.js 3.这几行是对的吗? 4.我错过或错了什么吗? 问题答案: 在其构造函数中接受一个

  • 问题内容: 我想使用Ajax通过模式上传文件。我怎样才能做到这一点? 我的模态: 这是我的JavaScript文件: 这是我的控制器: 但它返回错误500。我认为Ajax不接受使用Bootstrap模式的文件上传。 问题答案: 您可以像这样通过ajax使用引导程序模式上载文件。 在表单标签中,使用属性enctype和html如下所示: js代码: 在您的控制器端,您可以执行以下功能来上传图像。

  • 问题内容: 因此,我在将文件直接上传到S3时遇到了一些麻烦。目前,我的流程是向nodejs / express请求以获取签名的URL。 然后,我的角度控制器尝试使用该签名的URL($ scope.uploadDocument())直接上传到s3。 我的html表单看起来像 但是,每当我尝试上传到S3时,都会出现错误 我知道S3CORS在该存储桶的亚马逊端已正确设置,因为我已经开发了将相同存储桶用于