2015-07-10 3 views
1

Я использую API blobstore для загрузки изображения в свое приложение. Это прекрасно работает локально, что означает, что изображение успешно загружено и работает обратный вызов. Но когда я отправляю многостраничный запрос на uploadurl, возвращаемый createUploadUrl с сервера, он всегда дает мне 404 не найденную ошибку. Возможно ли, что blobstore не включен для моего приложения? Почему я не вижу свой blobstore в облачной консоли Google? Я должен пойти сюда https://appengine.google.com/blobstore/, чтобы увидеть мои капли.Google App Engine blobstore createUploadUrl 404 не найден на сервере

Код на стороне приложения: doPost обрабатывает обратный вызов и doGet возвращает uploadUrl (оба внутри одного сервлета/_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 не позволяет вам развертывать этот сервлет, попробуйте изменить URL.

Смежные вопросы