Java 将文件写入Blobstore AppEngine并服务于客户端
目标:客户端将字符串输入发送到服务器(应用程序引擎)。服务器修改输入,创建带有输出的文件,并将其提供给客户端。GWT项目 这是我的代码方案(服务器端和客户端),但我不知道如何将文件提供给客户端。每当我尝试在客户端输入任何BlobStore导入时,我都会在运行时(但不是在构建或编译时)出错 将文件写入Blobstore被标记为实验性的(http://code.google.com/appengine/docs/java/blobstore/overview.html#Writing_Files_to_the_Blobstore). 也许它还不起作用?你能帮我解决这个问题吗?即使不使用blob,只要实现了上述目标。多谢各位 ProjectServiceImpl.javaJava 将文件写入Blobstore AppEngine并服务于客户端,java,google-app-engine,gwt,blob,blobstore,Java,Google App Engine,Gwt,Blob,Blobstore,目标:客户端将字符串输入发送到服务器(应用程序引擎)。服务器修改输入,创建带有输出的文件,并将其提供给客户端。GWT项目 这是我的代码方案(服务器端和客户端),但我不知道如何将文件提供给客户端。每当我尝试在客户端输入任何BlobStore导入时,我都会在运行时(但不是在构建或编译时)出错 将文件写入Blobstore被标记为实验性的(http://code.google.com/appengine/docs/java/blobstore/overview.html#Writing_Files_t
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();
}
}
public interface ProjectService extends RemoteService {
String project(String name) throws IllegalArgumentException;
}
public interface ProjectServiceAsync {
void project(String input, AsyncCallback<String> callback)
throws IllegalArgumentException;
}
ProjectService.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();
}
}
public interface ProjectService extends RemoteService {
String project(String name) throws IllegalArgumentException;
}
public interface ProjectServiceAsync {
void project(String input, AsyncCallback<String> callback)
throws IllegalArgumentException;
}
ProjectServiceAsync.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();
}
}
public interface ProjectService extends RemoteService {
String project(String name) throws IllegalArgumentException;
}
public interface ProjectServiceAsync {
void project(String input, AsyncCallback<String> callback)
throws IllegalArgumentException;
}
公共接口ProjectServiceAsync{
无效项目(字符串输入,异步回调)
抛出IllegalArgumentException;
}
MyProject.java:客户端
[...]
projectService.project(originalString, new AsyncCallback<String>() {
[...]
public void onSuccess(final String result)
{
BlobstoreService blobService = BlobstoreServiceFactory.getBlobstoreService();
}
});
[…]
projectService.project(originalString,new AsyncCallback(){
[...]
成功时公共无效(最终字符串结果)
{
BlobstoreService BlobsService=BlobstoreServiceFactory.getBlobstoreService();
}
});
您不能在客户端使用应用程序引擎API(包括blobstore API)。API仅适用于应用程序引擎应用程序,而不适用于用户Javascript。要提供一个blob,请按照说明操作。谢谢,尼克!那么,只需在您提供的链接中添加service.java并将正确的blobKey传递给该类就足够了?不需要向MyProject.java添加任何Blob代码?我是否需要我的服务器端类来扩展HttpServlet而不是RemoteService,如链接中的示例所示?谢谢@user411103编写一个类似于演示中的servlet;它的工作原理取决于你想如何为你的斑点服务。您的servlet确实需要扩展HttpServlet。