2012-03-17 6 views
6

У меня только был успех при записи файла в облако 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 с локального хоста?

ответ

7

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

-1

Чтобы запустить его «псевдо» локально (например, в командной строке), вы должны сначала развернуть его, а затем использовать 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()); 

    } 

} 

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

0

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

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

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

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

EDIT: api_server.py находится в базовом каталоге:

$ python2.7 google_appengine/api_server.py 

 Смежные вопросы

  • Нет связанных вопросов^_^