Как получить доступ к файлу Cloud Storage из приложения, запущенного на локальном компьютере - PullRequest
6 голосов
/ 17 марта 2012

У меня только что получилось записать файл в облачное хранилище Google и прочитать его.Все хорошо после того, как я развернул приложение в appspot, но у меня возникли ошибки при запуске его локально:

INTERNAL_SERVER_ERROR
    Caused by:java.io.IOException
        at com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java:586)
        at com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java:561)
    ......

Кто-нибудь из вас знает, как получить доступ к файлу Google Cloud Storage с localhost?

Ответы [ 3 ]

7 голосов
/ 18 марта 2012

Среда тестирования разработчика App Engine поддерживает локальное моделирование облачного хранилища Google, но не предоставляет RPC-доступ к реальному объекту. Итак, ваш код должен работать в обеих средах, но вы должны думать о двух режимах как об отдельных пространствах имен и содержании. Так что, если, например, ваш код ожидает увидеть конкретное ведро foo, содержащее панель объектов, вам нужно будет отдельно создать это ведро / объект и убедиться, что оно содержит разумное содержимое, чтобы режим локального разработчика работал должным образом.

0 голосов
/ 24 августа 2012

Мне удалось найти и использовать симулированный сервис, упомянутый выше.К сожалению, для этой темы я не знаю Java.Но его использование в Python выглядит следующим образом ...

$ python2.7 google_appengine/google/appengine/tools/api_server.py --application myapp

(Обратите внимание, что api_server.py требует Python 2.7, потому что это зависит от модуля argparse.)

Кто-то еще должен будет понятькак сделать то же самое в Java.Сожалею.: (

РЕДАКТИРОВАТЬ: api_server.py находится в базовом каталоге:

$ python2.7 google_appengine/api_server.py
0 голосов
/ 06 апреля 2012

Чтобы запустить его «псевдо» локально (как в командной строке), вы должны сначала развернуть его, а затем использовать HttpClient для подключения к вашему серверу.Таким образом, вы можете взаимодействовать со своим сервлетом / jsp из командной строки и не должны отправлять формы с вложенными файлами

Пример кода [Вы, безусловно, можете стать более креативным, чем это]

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.client.ClientProtocolException;


public class FileUploaderClient {

    /**
     * @param args
     */
    public static void main(String[] args) throws ClientProtocolException, IOException{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://<app-version>.<app-name>.appspot.com/<servlet-name>");
        MultipartEntity reqEntity = new MultipartEntity();
        FileBody bin = new FileBody(new File("<File you want to upload>"));
        reqEntity.addPart("file", bin);
        httppost.setEntity(reqEntity);
        HttpResponse response = httpclient.execute(httppost);
        System.out.println(response.getStatusLine());

    }

}

Теперь у вас будет возможность вызывать свой сервлет в цикле, например, вместо многократной отправки формы

...