2011-11-16 193 views
0

目標:客戶端將字符串輸入發送到服務器(App Engine)。服務器修改輸入,使用輸出創建文件並將其提供給客戶端。 GWT項目。將文件寫入Blobstore AppEngine並提供給客戶端

這是我的代碼(服務器端和客戶端)的方案,但我不知道如何將文件提供給客戶端。每當我嘗試在客戶端輸入任何BlobStore導入時,我會在運行時遇到錯誤(但不會在構建或編譯時)。

將文件寫入Blobstore標記爲實驗性(http://code.google.com/appengine/docs/java/blobstore/overview.html#Writing_Files_to_the_Blobstore)。也許它還沒有工作?你能幫我解決這個問題嗎?即使它不使用Blob,只要滿足Objective。謝謝。

ProjectServiceImpl.java

public class ProjectServiceImpl extends RemoteServiceServlet implements ProjectService 
{ 
    public String project(String input) throws IllegalArgumentException 
    { 
     String output = doSomethingWith(input); 
     FileService fileService = FileServiceFactory.getFileService(); 
     AppEngineFile file = fileService.createNewBlobFile("text/plain"); 
     boolean lock = true; 
     FileWriteChannel writeChannel = fileService.openWriteChannel(file, lock); 
     writeChannel.write(ByteBuffer.wrap("Hello world!".getBytes())); 
     writeChannel.closeFinally(); 
     BlobKey blobKey = fileService.getBlobKey(file); 
     BlobstoreService blobService = BlobstoreServiceFactory.getBlobstoreService(); 
    } 
} 

ProjectService.java

public interface ProjectService extends RemoteService { 
    String project(String name) throws IllegalArgumentException; 
} 

ProjectServiceAsync.java

public interface ProjectServiceAsync { 
    void project(String input, AsyncCallback<String> callback) 
      throws IllegalArgumentException; 
} 

MyProject.java:客戶端

[...] 
projectService.project(originalString, new AsyncCallback<String>() { 
    [...] 
    public void onSuccess(final String result) 
    { 
     BlobstoreService blobService = BlobstoreServiceFactory.getBlobstoreService(); 
    } 
}); 

回答

2

無法使用App Engine的API - 包括Blob存儲區API - 在客戶端。 API僅適用於App Engine應用程序,不適用於用戶Javascript。要提供一個blob,請按照說明here

+0

謝謝尼克!因此,只需在您提供的鏈接中添加Serve.java並將該正確的blobKey傳遞給該類就足夠了?沒有必要將任何Blob代碼添加到MyProject.java?是否需要我的服務器端類來擴展HttpServlet而不是RemoteService,如鏈接中的示例所示?謝謝! – Arturo

+1

@ user411103編寫一個類似於演示中的servlet;它是如何工作的取決於你想如何服務你的斑點。您的servlet確實需要擴展HttpServlet。 –