2011-05-15 114 views
2

我想知道是否可以在不使用servlet的情况下将文件上传到gae blobstore,插入完成后是否也可以获取插入的blobkey?这是到目前为止,我已经做了代码:Google App Engine&Java:将文件上传到blobstore

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); 
     } 
    } 
+1

你到底想干什么?如果您尝试从您的应用程序写入blobstore,则应使用新的写入API。 – 2011-05-15 22:32:25

回答

3

没有办法上传在momenent文件到Blob存储,而无需使用一个servlet。

我想如果你喜欢,你可以使用blobstore的新实验写api。

GAE文档中的上传示例非常简单,并且会提示坚持。看看Blobstore Java API Overview。链接中有一个例子。

2

是用一个servlet更好,我将分享代码完全适用于登山和的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"); 
     } 

    } 

});
}

Upload.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){ 
相关问题