使用谷歌云存储HTML表单在POST / PUT物件上传文件(Upload file using P

2019-10-19 22:52发布

我开发一个非常简单的web应用程序与谷歌 - 应用程序引擎Eclipse插件。 我刚刚写这段程式码,在我的“/home.html”的HTML的。

这里home.html的是:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Insert title here</title>
</head>
<body>
<form action="http://storage.googleapis.com/myBucketName" method="post" name="putFile" id="putFile"
            enctype="multipart/form-data">
            <input type="hidden" name="key" value="I don't know what is going here because i cannot guess which file i will upload" />
            <input type="hidden" name="success_action_status" value="201" />
            <input type="file" name="file" id="file">
            <input type="submit" value="Upload">
        </form>
</body>
</html>

这是一个没有任何授权或什么的。对于一个信息非常简单的形式,你可以看到这一点: https://developers.google.com/storage/docs/reference-methods#postobject (我已经记住) 。

我有不同的响应错误从谷歌(以XML格式),如:

1)

<Error>
<Code>InvalidArgument</Code>
<Message>Invalid argument.</Message>
<Details>Missing file part</Details>
</Error>

2)

<Error>
<Code>InvalidArgument</Code>
<Message>Invalid argument.</Message>
<Details>Cannot create buckets using a POST.</Details>
</Error>

3)

<Error>
<Code>InvalidArgument</Code>
<Message>Invalid argument.</Message>
<Details>
Invalid query parameter(s): [file, success_action_status, key]
</Details>
</Error>

谁能帮我填写这张表格,好吗?

更具体地讲:它适用于这种形式:

<form action="http://storage.googleapis.com/bucketName" method="post" name="putFile" id="putFile"
            enctype="multipart/form-data">
            <input type="hidden" name="bucket" value="bucketName">
            <input type="hidden" name="key" value="fileUploadingName" />
            <input type="hidden" name="success_action_status" value="201" />
            <input type="file" name="file">
            <input type="submit" value="Upload">
        </form>

该fileUploadingName是例如:sample.txt的

但问题仍然存在,因为我需要fiil正确的“钥匙”是,我要上传的文件的名称。 我该如何解决呢?

Answer 1:

这里有一个工作形式,例如:

<form action="http://storage.googleapis.com/bucketName" 
      method="post" enctype="multipart/form-data">
    <input type="hidden" name="key" value="${filename}" />
    <input type="hidden" name="success_action_status" value="201" />
    <input type="file" name="file">
    <input type="submit" value="Upload">
</form>

请注意,有没有隐藏的bucket场随着铲斗名称已包含在表单POST URL。

关键的参数,可以${filename}将采取文件的原始名称被上传。 但如果你尝试上传两个文件具有相同名称的人会被其他会被覆盖。

另外,不要忘记你的水桶需要有PUBLIC_WRITE ACL。 您可以gsutil所,如设置:

gsutil acl set public-read-write gs://bucketName


Answer 2:

它可以上传文件,而不允许公共写。 我发现它更容易使用谷歌云平台的AWS S3互通这种事情,因为它使用比典型的GCloud OAuth的一个简单的身份验证方案。

要使用S3的互操作,去桶设置在谷歌云平台的开发者控制台 ,然后单击互操作性 。 实现互操作性,并生成一个密钥。

在这一点上,可以用户进行任何的常见上传情景S3,而取代这些gcloud互操作证书,并改变端点storage.googleapis.com

  • 在浏览器上传到S3 AWS官方的文档
  • AWS浏览器的JavaScript SDK中的例子
  • TJ Holowaychuk -使用最少的HTML和JavaScript S3上传


Answer 3:

<Details>Cannot create buckets using a POST.</Details>

可能意味着:

  • 文件参数必须在最后。
  • 内容类型必须是多部分/格式数据
  • 只允许一个文件
  • 键或文件名(在文件形式场)应充满


文章来源: Upload file using POST/PUT Object of Google Cloud Storage HTML Form