2010-11-09 53 views
1

一個zip文件,這是我的html頁面:有錯誤時,我想讀取存儲在Blob存儲

上傳您的文件在這裏:

<form action="<%= blobstoreService.createUploadUrl("/bootstrap") %>" method="post" enctype="multipart/form-data"> 

     <input type="file" name="myFile"> 

     <input type="submit" value="Submit"> 

    </form> 

這是我的控制器:

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException, UploadException { 

    response.setContentType("text/html;charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    try { 
     Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(request); 
     BlobKey blobKey = blobs.get("myFile"); 

     if (blobKey == null) { 
     response.sendRedirect("/"); 
     } else { 
      BlobKey blobKey2 = new BlobKey(blobKey.getKeyString()); 
      BlobstoreInputStream in = new BlobstoreInputStream(blobKey2); 

      ZipInputStream zis = new ZipInputStream(new BufferedInputStream(in)); 
      ZipEntry entry = zis.getNextEntry(); 

      while (entry !=null){ 
       String fileName = entry.getName(); 
       int fileSize = (int) entry.getSize(); 

      } 
     } 

我正在上傳一個包含6個zip文件的文件。我可以上傳,但我無法閱讀zip文件。任何更好的解決方案或必須配置的東西?

+3

你有什麼期望,什麼是實際bahaviour(錯誤/問題)? *不能讀*有點模糊.. – 2010-11-09 08:23:44

回答

1

首先我們需要知道Blob和BlobKey之間的區別。通過使用BlobKey可以檢索存儲在Blobstore中的數據超過1MB。下面的代碼是讀取zipfile的示例。

的API幫助我解決: http://code.google.com/appengine/docs/java/javadoc/

BlobstoreInputStream in = new BlobstoreInputStream(blobKey); 
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(in)); 
ZipEntry entry = zis.getNextEntry(); 
+0

你沒在聽。如果zip壓縮文件中的任何單個文件大於1MB,則不起作用。我已經與應用引擎開發人員討論了這個確切的問題。檔案本身可以很大,沒關係,你可以從blobstore中讀取它。但是如果任何單個文件大於1MB,則無法將其提取出來。我不知道我可以做得更清楚些。 – 2010-11-11 23:51:06

+0

是的,我知道你的觀點。我設法解決它:)謝謝 – madi 2010-11-12 16:41:47

0

如果您嘗試提取的zip歸檔文件中的任何單個文件大於1MB,則它將不起作用。沒有辦法解決這個問題。您可以在blobstore中存儲任何您想要的內容,但GAE對任何內存數據結構施加1MB的限制;這意味着如果您嘗試對大於1MB的任何對象進行操作,則操作將失敗。在上面的示例中,如果存檔中的任何文件未壓縮的大於1MB,則您的ZipEntry對象大於1MB。

+0

我怎麼解決? – madi 2010-11-11 13:01:14

+0

我一定不清楚。如果你打破了1MB的限制,那麼沒有解決方案。您無法使用App Engine。如果存檔中的任何單個文件大於1MB,絕對沒有辦法在App Engine上提取zip文件,而且絕對沒有辦法解決這個問題。如果你試圖找到解決方法,你將只會遇到挫折,因爲這是不可能的。抱歉。 – 2010-11-11 23:47:41