Запись файлов в Blobstore AppEngine и предоставление клиенту

Цель: клиент отправляет входные данные String на сервер (App Engine). Сервер модифицирует ввод, создает файл с выводом и передает его Клиенту. проект ГВТ.

Это схема моего кода (на стороне сервера и на стороне клиента), но я не знаю, как передать файл клиенту. Всякий раз, когда я пытаюсь ввести какой-либо импорт BlobStore на стороне клиента, я получаю ошибки во время выполнения (но не во время сборки или компиляции).

Запись файлов в Blobstore помечена как экспериментальная (http://code.google.com/appengine/docs/java/blobstore/overview.html#Writing_Files_to_the_Blobstore). Может еще не работает? Не могли бы вы помочь мне с этой проблемой? Даже если он не использует BLOB-объекты, если цель выше выполнена. Спасибо.

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();
    }
});

person Community    schedule 16.11.2011    source источник


Ответы (1)


Вы не можете использовать API App Engine, в том числе API хранилища BLOB-объектов, на стороне клиента. API доступны только для приложения App Engine, но не для пользовательского Javascript. Чтобы подать большой двоичный объект, следуйте инструкциям здесь.

person Nick Johnson    schedule 16.11.2011
comment
Спасибо, Ник! Итак, достаточно просто добавить Serve.java в предоставленную вами ссылку и передать этому классу правильный blobKey? Нет необходимости добавлять какой-либо код Blob в MyProject.java? Нужно ли, чтобы мои серверные классы расширяли HttpServlet вместо RemoteService, как в примере по ссылке? Спасибо! - person ; 17.11.2011
comment
@user411103 user411103 Напишите сервлет, как в демонстрации; как это работает, зависит от того, как вы хотите обслуживать свои большие двоичные объекты. Ваш сервлет должен расширять HttpServlet. - person Nick Johnson; 17.11.2011