【发布时间】:2014-04-05 19:25:51
【问题描述】:
在我的 Android 应用程序中,我想将图像上传到 Blobstore,然后检索上传 url 和图像的 Blobkey,这样我就可以将 Blobkey 存储在 DataStore 中。
我试过这段代码,但我的图片没有上传:
Servlet(返回上传网址)
BlobstoreService blobstoreService = BlobstoreServiceFactory
.getBlobstoreService();
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
UploadOptions uploadOptions = UploadOptions.Builder
.withGoogleStorageBucketName("photobucket11")
.maxUploadSizeBytes(1048576);
String blobUploadUrl = blobstoreService.createUploadUrl("/upload",
uploadOptions);
// String blobUploadUrl = blobstoreService.createUploadUrl("/uploaded");
resp.setStatus(HttpServletResponse.SC_OK);
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
out.print(blobUploadUrl);
}
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
doGet(req, resp);
}
代码:安卓客户端
Bitmap bmp = BitmapFactory.decodeFile(imagePath);
ByteArrayOutputStream out = new ByteArrayOutputStream();
bmp.compress(CompressFormat.JPEG, 75, out);
byte[] imgByte = out.toByteArray();
String encodedImage = Base64.encodeToString(imgByte,
Base64.DEFAULT);
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(
"app-url/ImgUpload");
HttpResponse response = httpClient.execute(httpGet);
HttpEntity urlEntity = response.getEntity();
InputStream in = urlEntity.getContent();
String str = "";
while (true) {
int ch = in.read();
if (ch == -1)
break;
str += (char) ch;
}
这将以/_ah/upload/akjdhjahdjaudshgaajsdhjsdh 的形式返回上传网址,我可以使用它来存储图像。
这段代码使用url来存储图片:
httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(str);
ByteArrayBody bab = new ByteArrayBody(imgByte, "forest.jpg");
MultipartEntity reqEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("uploaded", bab);
reqEntity.addPart("photoCaption", new StringBody("sfsdfsdf"));
postRequest.setEntity(reqEntity);
response = httpClient.execute(postRequest);
BufferedReader reader = new BufferedReader(
new InputStreamReader(
response.getEntity().getContent(), "UTF-8"));
String sResponse;
StringBuilder s = new StringBuilder();
while ((sResponse = reader.readLine()) != null) {
s = s.append(sResponse);
}
这里,如果我检查字符串s 的值,它会显示null。这意味着它返回一个空响应。我不知道这段代码有什么问题。请指导我解决这个问题。
【问题讨论】:
标签: android google-app-engine google-cloud-datastore blobstore