编程语言
首页 > 编程语言> > Java-Google云端存储:上传的图片已损坏

Java-Google云端存储:上传的图片已损坏

作者:互联网

我正在使用以下代码将图像上传到我的Google云存储中的存储桶:

        File file = new File("test.jpg");

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("https://www.googleapis.com/upload/storage/v1/b/imagecachebucket/o?uploadType=media&name=test.jpg&projection=full");
        httppost.setHeader("Content-Type", "image/jpeg");

        FileBody fileB = new FileBody(file, "image/jpeg");

        MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();        
        multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
        multipartEntity.addPart("file", fileB);
        httppost.setEntity(multipartEntity.build());
        System.out.println( "executing request " + httppost.getRequestLine( ) );
        try {
            HttpResponse response = httpclient.execute( httppost );
            System.out.println("response: " + response.getStatusLine().toString());
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        httpclient.getConnectionManager( ).shutdown( );

图像已上传,我可以在云存储浏览器中看到它,但是当我要查看图像时,它已损坏,只有标准图标显示了不可查看的图像.当我通过云存储浏览器上传图像时,图像已正确上传.

解决方法:

您似乎正好按照1部分进行分段上传,但是您已将uploadType指定为“ media”.

媒体上传类型适用于您仅上传文件的情况.在这种情况下,Google Cloud Storage希望整个主体都是要上传的对象.

如果您要分段上传,那很好.为此,您应该使用上传类型“ multipart”.分段上传需要两部分,其中第一部分是对象的元数据(权限,自定义用户元数据等),第二部分是数据.

这里有每种上传类型的确切文档:https://developers.google.com/api-client-library/php/guide/media_upload

我的HttpClient-fu不太好,但是我认为“媒体”情况看起来像这样:

FileEntity entity = new FileEntity(file, 
ContentType.create("text/plain", "UTF-8"));        
HttpPost httppost = new HttpPost("https://www.googleapis.com/upload/storage/v1/b/imagecachebucket/o?uploadType=media&name=test.jpg&projection=full");
httppost.setEntity(entity);

标签:java,google-cloud-storage,image
来源: https://codeday.me/bug/20191012/1900627.html