GAE blobstore:无法使用Jersey上传文件

时间:2013-12-22 09:46:13

标签: java rest google-app-engine jersey blobstore

我正在尝试使用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 :.......

标签:图片的测试标签

图片:图片(文件)

我收到了这条错误消息:

  

错误:服务器错误

     

服务器遇到错误,无法完成您的请求。   请重试您的上次提交。

     

如果问题仍然存在,请联系负责人   您正在使用的应用程序,或者,如果您是该人,请报告您的   问题并提及此错误消息和导致它的查询。

但我看不到服务器错误。

我哪里错了?

提前致谢。

0 个答案:

没有答案