我对文件上传完全陌生....我正在使用angular-file-upload创建一个XHR 的angularjs来上传文件到谷歌云储存。当我尝试上传时,我不断收到以下错误。我该如何解决这个问题?
/
(?:jump|call|rts|rti)\s*
\(\w+\)\s*
(?!\(db\)) # Not followed with (db)
/xi
这是我的控制器设置:
400 Bad content type. Please use multipart.
答案 0 :(得分:1)
问题在于您使用的终端用于分段上传,而不是基于FORM的分段上传。如果您将内容类型设置为" 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,也不知道它是否支持非表单式上传)。
答案 1 :(得分:1)
对于使用fetch
的用户,只需删除标题上的content-type
。
我在github上发现了此问题,并引用:
手动设置Content-Type标头意味着它缺少border参数。删除该标头,并允许提取生成完整的内容类型。看起来像这样:
Content-Type:multipart / form-data; boundary = ---- WebKitFormBoundaryyrV7KO0BoCBuDbTL
Fetch知道根据>请求正文内容传入的FormData对象创建哪个内容类型标头。
^^这个对我有用。