我正在尝试使用GAE + Jersey框架(Java)将图像上传到Blobstore。
我调用此方法获取有效的网址以上传我的图片:
@GET
@Path("/urlToUpload")
public Response getUrlToUploadImage(){
String url = blobstoreService.createUploadUrl("/image/upload");
return Response.ok(url).build();
}
回调方法是:
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadImage(@Context HttpServletRequest req){
String token = req.getParameter("userToken");
String label = req.getParameter("label");
User user = null;
if(token == null || (user = ofy().load().type(User.class).filter("token", token).first().now()) == null)
return Response.status(Response.Status.UNAUTHORIZED).build();
Image image = new Image();
image.key = this.loadImage(req);
image.label = label;
image.user = Ref.create(user);
ofy().save().entity(image).now();
return Response.ok(image.key).build();
}
并且loadImage()方法是:
private String loadImage(HttpServletRequest req){
Map<String, List<BlobKey>> blobFields = blobstoreService.getUploads(req);
BlobKey blobKey = null;
List<BlobKey> blobKeys = blobFields.entrySet().iterator().next().getValue();
if (blobKeys != null && !blobKeys.isEmpty()) blobKey = blobKeys.get(0);
return blobKey.getKeyString();
}
因此,当我提出 http://xxxx.appspot.com/image/urlToUpload 之类的请求时,我会收到类似这样的网址:
http://xxxx.appspot.com/_ah/upload/?token=bkd0ZmZKUkVQYVNXQmh0OGFmUkxaUHlUc0xpT1pUSDdyOFVmMGtLUDlKQzVjdXplUmluNmcxRHVNb1pYc3M4aTMrQ3loa2NHaklHcVBtL2NnMXAxOVdWUndGdExibDdzN2JJU1k3QmFoWFVYSVdnTUt5SkRJdz0/AMmfu6YyFqr8i0pf5u5LiM1tzu79TZwztQgw_DWa1e3l7bWly99Ui6y9prF29NHU7DZg8RFZKDUuvCE-vWqjGr_oQTV0RM8T3AG2Tk9iVayuYl0uCRTmNt-RGS5B9bs_cKgDnib-8AxT/ALBNUaYAAAAAUraynFI4WVGvSMHU_Uz8JptJ5M36uGDl/
所以我使用该URL发送一个POST请求,发送带有以下参数的表单数据:
userToken :.......
标签:图片的测试标签
图片:图片(文件)
我收到了这条错误消息:
错误:服务器错误
服务器遇到错误,无法完成您的请求。 请重试您的上次提交。
如果问题仍然存在,请联系负责人 您正在使用的应用程序,或者,如果您是该人,请报告您的 问题并提及此错误消息和导致它的查询。
但我看不到服务器错误。
我哪里错了?
提前致谢。