Google 云存储:上传的图像已损坏
Google Cloud Storage: Uploaded image is corrupt
我正在使用以下代码将图像上传到我的 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 个部分进行分段上传,但您已将上传类型指定为 "media"。
媒体上传类型适用于您只是上传文件的情况。在这种情况下,Google Cloud Storage 期望整个正文都是正在上传的对象。
如果您想分段上传,那没问题。为此,您应该使用上传类型 "multipart." 分段上传需要两部分,其中第一部分是对象的元数据(权限、自定义用户元数据等),第二部分是数据。
这里有每种上传类型的确切文档:https://developers.google.com/api-client-library/php/guide/media_upload
我的 HttpClient-fu 不是很好,但我认为 "media" 案例看起来更像这样:
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 云存储中的存储桶:
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 个部分进行分段上传,但您已将上传类型指定为 "media"。
媒体上传类型适用于您只是上传文件的情况。在这种情况下,Google Cloud Storage 期望整个正文都是正在上传的对象。
如果您想分段上传,那没问题。为此,您应该使用上传类型 "multipart." 分段上传需要两部分,其中第一部分是对象的元数据(权限、自定义用户元数据等),第二部分是数据。
这里有每种上传类型的确切文档:https://developers.google.com/api-client-library/php/guide/media_upload
我的 HttpClient-fu 不是很好,但我认为 "media" 案例看起来更像这样:
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);