问题描述
我正在使用以下代码将图像上传到我的Google云存储中的存储桶中:
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.
推荐答案
您似乎正好按1部分进行分段上传,但是您已将uploadType指定为"media".
It looks like you're doing a multipart upload of exactly 1 part, but you've specified the uploadType to be "media".
媒体上载类型适用于您仅上载文件的情况.在这种情况下,Google Cloud Storage希望整个主体都是要上传的对象.
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.
如果要分段上传,那很好.为此,您应该使用上传类型"multipart".分段上传需要两部分,其中第一部分是对象的元数据(权限,自定义用户元数据等),第二部分是数据.
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.
这里有每种上传类型的确切文档: https://developers.google.com/api-client-library/php/guide/media_upload
There's exact documentation for each type of upload type here: https://developers.google.com/api-client-library/php/guide/media_upload
我的HttpClient-fu不太好,但是我认为媒体"情况看起来更像这样:
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云端存储:上传的图片已损坏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!