Google App Engine и Java: загрузка файлов в blobstore

Я хотел бы знать, можно ли загрузить файл в хранилище больших двоичных объектов gae без использования сервлетов, а также можно ли получить вставленный ключ после завершения вставки? это код, который я сделал до сих пор:

public Upload(Blob picture) {
        HTTPResponse fetch = null;
        try {
            BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
            URLFetchService urlfetch = URLFetchServiceFactory.getURLFetchService();
            String uploadUrl = blobstoreService.createUploadUrl("/upload");
            URL url = new URL(uploadUrl);
            HTTPRequest request = new HTTPRequest(url, HTTPMethod.POST);

            request.setPayload(picture.getBytes());


            try {
                urlfetch.fetch(request);

            } catch (IOException ex) {
                java.util.logging.Logger.getLogger(Outfit.class.getName()).log(Level.SEVERE, null, ex);
            }


        } catch (MalformedURLException ex) {
            java.util.logging.Logger.getLogger(Outfit.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

person Roch    schedule 15.05.2011    source источник
comment
Что ты пытаешься сделать? Если вы пытаетесь выполнить запись в хранилище больших двоичных объектов из своего приложения, вам следует использовать новый API записи.   -  person Nick Johnson    schedule 16.05.2011


Ответы (2)


На данный момент нет возможности загрузить файл в blobstore без использования сервлета.

Я полагаю, если хотите, вы можете использовать новый экспериментальный API для записи blobstore.

Пример загрузки в документации GAE довольно прост и предлагает придерживаться его. Ознакомьтесь с Обзором Java API Blobstore. По ссылке есть пример.

person Daniel Kurka    schedule 15.05.2011

Лучше с сервлетом, поделюсь кодом, отлично работает для лазания, а BlobKey должен захватывать и хранить в хранилище данных

.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.*" %>
<%@ page import="com.google.appengine.api.blobstore.BlobstoreServiceFactory" %>
<%@ page import="com.google.appengine.api.blobstore.BlobstoreService" %>
<%
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
String url = blobstoreService.createUploadUrl("/upload");

%>

<!DOCTYPE html>
<html lang="en">
<body>
   <div class="form-group">
        <label for="inputEmail1" class="col-lg-2 control-label">Foto</label>
        <div class="col-lg-10">
            <input id="file-foto-usuario" type="file" name="file-foto-usuario" onchange="UploadImage()">
            <input type="hidden" class="form-control" id="foto-usuario" placeholder="Foto">
     </div>
  </div>
</body>

.js

function UploadImage(){
 var inputFileImage = document.getElementById("file-foto-usuario");
 var file = inputFileImage.files[0];
 var data = new FormData();
 data.append("file-foto-usuario",file);
 var url = "<%=url%>";
$.ajax({
    url:   url,
    type:  'POST',
    cache : false,
    data : data,
    processData : false,
    contentType : false,
    dataType: "json",
    success:  function (response) {        
       if(response.success){
         alert(response.blobKey);

       }else{
           alert("fail");
       }

    }

});
}

Загрузить.java

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.simple.JSONObject;

import com.google.appengine.api.blobstore.BlobKey;
import com.google.appengine.api.blobstore.BlobstoreService;
import com.google.appengine.api.blobstore.BlobstoreServiceFactory;

public class UploadServlet extends HttpServlet {
private BlobstoreService blobstoreService =    BlobstoreServiceFactory.getBlobstoreService();
public void doPost(HttpServletRequest req, HttpServletResponse resp)
     throws IOException {

    JSONObject finalJson = new JSONObject();
    Boolean success= false;
    String blobid= "";
    Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
    BlobKey blobKey = blobs.get("file-foto-usuario");

    if (blobKey == null) {
        resp.sendRedirect("/");
    } else {
        success= true;
        blobid= blobKey.getKeyString();
        //resp.sendRedirect("/serve?blob-key=" + blobKey.getKeyString());
    }

    finalJson.put("success", success);
    finalJson.put("blobKey", blobid);
    resp.setCharacterEncoding("utf8");
    resp.setContentType("application/json"); 
    PrintWriter out = resp.getWriter(); 
    out.print(finalJson);

}

}

получить URL-адрес изображения

     String urlFoto = ""; 
             BlobKey blobKey = new BlobKey(Blobkey);
             ImagesService imagesService = ImagesServiceFactory.getImagesService();     
             try{
                 urlFoto = imagesService.getServingUrl(blobKey, true);       
             }catch (IllegalArgumentException ie){
person Edy Aguirre    schedule 14.04.2014