【问题标题】:error: Bad content type. Please use multipart错误:错误的内容类型。请使用多部分
【发布时间】:2015-09-04 05:00:01
【问题描述】:

我对文件上传完全不熟悉......我正在使用 angular-file-upload 创建一个 XHR outside 的 angularjs 将文件上传到谷歌云存储.当我尝试上传时,我不断收到以下错误。我该如何解决这个问题?

400 Bad content type. Please use multipart.

这是我的控制器设置:

var uploader = $scope.uploader = new FileUploader({
      url: 'https://www.googleapis.com/upload/storage/v1/b/bucketsbuckets/o?uploadType=multipart',
      headers : {
            'Authorization': 'Bearer ya29.lgHmbYk-5FgxRElKafV4qdyWsdMjBFoO97S75p4vB0G0d6fryD5LASpf3JUY8Av9Yzhp9cQP8IQqhA', 
            'Content-Type': 'multipart/form-data'
      },
      autoUpload:true
  });

【问题讨论】:

    标签: javascript angularjs file-upload xmlhttprequest google-cloud-storage


    【解决方案1】:

    问题在于您使用的端点用于分段上传,而不是基于 FORM 的分段上传。如果您将 Content-Type 设置为“multipart/related”而不是“multipart/form-data”,您应该可以继续。

    向该端点“www.googleapis.com/upload/storage/etc?uploadType=multipart”的分段上传需要包含两部分的分段消息,第一部分是对象的元数据,采用 JSON 格式,第二部分是数据。

    更多关于这些要求的信息在这里:https://cloud.google.com/storage/docs/json_api/v1/how-tos/upload

    但是,如果您想以表单提交的方式进行上传,这也是可能的,但规则不同。在这种情况下,您将使用各种适当的表单参数向“storage.googleapis.com/BUCKET/OBJECT”提交 POST:https://cloud.google.com/storage/docs/reference-methods#postobject

    现在,这一切都假设您出于某种原因尝试将上传作为多部分请求。如果您需要在对象上设置一些特定的元数据属性,这可能是必要的,但如果不需要,您可能会让事情变得更加困难。一个简单的 PUT 到“storage.googleapis.com/BUCKET/OBJECT”就可以了(虽然我不熟悉 angular-file-upload 并且不知道它是否支持非表单样式的上传)。

    【讨论】:

      【解决方案2】:

      对于那些使用fetch 的人,只需删除标题上的content-type

      我在github 上发现了这个问题并引用:

      手动设置 Content-Type 标头意味着它缺少边界参数。删除该标头并允许 fetch 生成完整的内容类型。它看起来像这样:

      Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryyrV7KO0BoCBuDbTL

      Fetch 根据作为 > 请求正文内容传入的 FormData 对象知道要创建哪种内容类型标头。

      ^^ 这个对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-08
        • 2020-01-20
        • 1970-01-01
        • 2017-12-08
        • 1970-01-01
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多