2015-07-10 82 views
1

我正在使用blobstore API将图像上传到我的应用程序。这可以在本地正常工作,这意味着图像已成功上传,并且回调也可以正常工作。但是,当我将多部分请求发送到由服务器的createUploadUrl返回的uploadurl时,它总是会给我404找不到的错误。 是否有可能blobstore未启用我的应用程序?为什么我无法在Google云端控制台中看到我的blobstore?我必须去这里https://appengine.google.com/blobstore/看到我的斑点。Google App Engine blobstore createUploadUrl 404在服务器上找不到

应用程序端的代码:doPost处理回调,doGet返回uploadUrl(都在同一个servlet/_ah/admin/new_image中)。不会触发doPost(回调处理程序代码),也不会上传图像。上传图片

@Override 
public void doPost(HttpServletRequest req, HttpServletResponse resp) 
      throws IOException { 

    Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(req); 
    List<BlobKey> blobKeys = blobs.get("image"); 
    ImagesService imagesService = ImagesServiceFactory.getImagesService(); 
    String imageUrl = imagesService.getServingUrl(ServingUrlOptions.Builder.withBlobKey(blobKeys.get(0))); 
    Long businessId = Long.parseLong(req.getParameter("business_id")); 
    String linkUrl = req.getParameter("link_url"); 
    Long id = Long.parseLong(req.getParameter("advertisement_id")); 
    AdvertisementManager.addNewAdvertisement(id, imageUrl, linkUrl, businessId); 
} 

@Override 
public void doGet(HttpServletRequest req, HttpServletResponse resp) 
      throws IOException { 

    PrintWriter out = resp.getWriter(); 
    resp.setContentType("text/html"); 
    String uploadUrl = blobstoreService.createUploadUrl(""); 
    Logger.getLogger("").log(Level.WARNING,uploadUrl); 
    out.print(uploadUrl); 
} 

代码:首先发送一个GET请求来获取上传的URL,然后将与图像文件

public static void upload(Long id, File file, String linkUrl, Long businessId){ 
    HttpClient httpclientget = HttpClientBuilder.create().build(); 
    HttpGet httpget = new HttpGet("http://app-url/_ah/admin/new_image"); 

    String uploadUrl = ""; 

    try { 
     HttpResponse responseGet = httpclientget.execute(httpget); 
     uploadUrl = EntityUtils.toString(responseGet.getEntity()); 
     Logger.getLogger("").log(Level.WARNING,uploadUrl); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    }  
    HttpClient httpclient = HttpClientBuilder.create().build(); 
    HttpPost httpPost = null; 
    String uri=null; 

    try { 
     URIBuilder builder = new URIBuilder(uploadUrl); 
     builder.setParameter("advertisement_id", id.toString()); 
     builder.setParameter("link_url", linkUrl); 
     builder.setParameter("business_id", businessId.toString()); 
     uri=builder.build().toString(); 
    } catch (URISyntaxException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    httpPost = new HttpPost(uri); 
    System.out.println(uri); 
    if (file!=null){ 
     MultipartEntityBuilder reqEntity = MultipartEntityBuilder.create(); 
     reqEntity.addBinaryBody("image", file, ContentType.create("image/jpeg"), "ad.jpg"); 

     httpPost.setEntity(reqEntity.build()); 
    } 
    try { 
     HttpResponse response = httpclient.execute(httpPost); 
     System.out.println(response); 
    } catch (Exception e){ 
     System.out.println(e.getMessage()); 
     e.printStackTrace(); 
    } 
} 

回答

1

AFAIK的/ _ah/*空间保留给多要求内部的GAE服务,你不应该使用它。您得到404的原因可能是Google阻止您部署该servlet,请尝试更改该URL。

相关问题