【问题标题】:Google Cloud Storage : java.lang.RuntimeException: Server replied with 400, probably bad request谷歌云存储:java.lang.RuntimeException:服务器回复 400,可能是错误请求
【发布时间】:2015-06-05 08:15:42
【问题描述】:

我创建了一个应用程序,它使用谷歌云存储客户端库允许用户将文件上传到云。我创建了一个存储桶并添加了我的项目帐户

我已经部署了我的应用程序并尝试选择文件将其上传到谷歌云,它给了我以下异常:

Caused by: com.google.appengine.tools.cloudstorage.NonRetriableException: java.lang.RuntimeException: Server replied with 400, probably bad request: Request: PUT https://storage.googleapis.com/gemsnps_edunext_1/sample.pdf?upload_id=AEnB2Ur6pjafrkUb_S2BUJKxNClkNfwvaVt7s6rDwnLOm5R6oew0ps0_ilZI1lqP82EChEVqktsj0qA5TcVaVdmfowSpz6AlVg
User-Agent: App Engine GCS Client
Content-Length: 52326
Content-MD5: SB0Bpju4CXK/jcmWTsjiyQ==
Content-Range: bytes 0-52325/52326

52326 bytes of content

Response: 400 with 117 bytes of content
Content-Type: application/xml; charset=UTF-8
Content-Length: 117
Vary: Origin
<?xml version='1.0' encoding='UTF-8'?><Error><Code>InvalidArgument</Code><Message>Invalid argument.</Message></Error>

    at com.google.appengine.tools.cloudstorage.RetryHelper.doRetry(RetryHelper.java:120)
    at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:166)
    at com.google.appengine.tools.cloudstorage.RetryHelper.runWithRetries(RetryHelper.java:156)
    at com.google.appengine.tools.cloudstorage.GcsOutputChannelImpl.close(GcsOutputChannelImpl.java:198)
    at com.application.sis.plateform.gae.GaeFileService.saveFile(GaeFileService.java:106)
    at

代码

            String bucketName = "gemsnps_edunext_1";

            String contentType = item.getContentType();
            GcsFileOptions.Builder fileOptionBuilder = new GcsFileOptions.Builder().mimeType(contentType).acl("public-read-write");

            if (fileName.toLowerCase().endsWith(".pdf") || fileName.toLowerCase().endsWith(".xls")
                    || fileName.toLowerCase().endsWith(".xlsx") || fileName.toLowerCase().endsWith(".txt")
                    || fileName.toLowerCase().endsWith(".ppt") || fileName.toLowerCase().endsWith(".doc")
                    || fileName.toLowerCase().endsWith(".docs") || fileName.toLowerCase().endsWith(".zip")
                    || fileName.toLowerCase().endsWith(".jar")) {
                fileOptionBuilder.contentDisposition("attachment;filename=" + item.getName());
            }

            fileOptionBuilder.cacheControl("no-cache");
            GcsFileOptions gcsFileOptions = fileOptionBuilder.build();


            GcsFilename gcsFilename = new GcsFilename(bucketName, fileName);
            GcsOutputChannel writeChannel = gcsService.createOrReplace(gcsFilename, gcsFileOptions);

            System.err.println("File Writing");
            writeChannel.write(ByteBuffer.wrap(IOUtils.toByteArray(stream)));
            System.err.println("Writer Closing");
            // Now finalize
           writeChannel.close();

代码最后一行的错误。

【问题讨论】:

    标签: google-app-engine google-cloud-storage


    【解决方案1】:

    我在尝试从谷歌应用引擎将 xlsx 文件写入谷歌云存储时遇到了同样的问题。

    我更改了 GCSOptions 参数...

    GcsFileOptions.Builder fileOptionBuilder = new GcsFileOptions.Builder().mimeType(contentType).acl("project-private");
    

    注意为 ACL 传递的参数。 希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 2019-04-09
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      相关资源
      最近更新 更多