Google Cloud Storage: Uploaded image is corrupt(Google Cloud Storage:上传的图片已损坏)
问题描述
I am uploading an image to my bucket in my google cloud storage with the following code:
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( );
The image is uploaded, i can see it in the cloud storage browser, but when i want to view the image, it is broken, there is only the standard icon for a non viewable image. When i upload the image over the cloud storage browser, the image is uploaded correctly.
It looks like you're doing a multipart upload of exactly 1 part, but you've specified the uploadType to be "media".
The media upload type is for the case where you are simply uploading a file. In that case, Google Cloud Storage expects the whole of the body to be the object that is being uploaded.
If you want to do a multipart upload, that's fine. For that, you should use the upload type "multipart." Multipart uploads expect two parts, where the first part is the object's metadata (permissions, custom user metadata, etc) and the second part is the data.
There's exact documentation for each type of upload type here: https://developers.google.com/api-client-library/php/guide/media_upload
My HttpClient-fu isn't very good, but I think that a "media" case would look more like this:
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);
这篇关于Google Cloud Storage:上传的图片已损坏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Google Cloud Storage:上传的图片已损坏
基础教程推荐
- JPA惰性列表上的流 2022-01-01
- Java ECDSAwithSHA256 签名长度不一致 2022-01-01
- 如何在相机中应用自定义滤镜 [Surfaceview 预览]. 2022-01-01
- 在springboot中如何给mybatis加拦截器 2023-04-29
- doFilter()是在servlet的工作完成之前还是之后执行的? 2022-01-01
- 将 double 转换为 Int,向下舍入 2022-01-01
- Maven:无效的目标版本:10 2022-01-01
- 将 Windows 证书导入 Java 2022-01-01
- 在java中使用xpath和selenium解析HTML表格数据 2022-01-01
- 控制台应用程序中的 Java 键盘输入解析 2022-01-01
