2012-03-17 16 views
6

Tengo éxito al escribir el archivo en Google Cloud Storage y leerlo. Todo está bien después puedo implementar la aplicación para AppSpot, pero tengo errores cuando se ejecuta locales:Cómo acceder al archivo de Cloud Storage desde la aplicación que se ejecuta en local

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) 
    ...... 

¿Alguien de ustedes sabe cómo acceder a archivos de Google Cloud Storage desde localhost?

Respuesta

7

El entorno de prueba del desarrollador de App Engine admite una simulación local de Google Cloud Storage, pero no proporciona acceso RPC a la realidad. Por lo tanto, su código debería funcionar en ambos entornos, pero debería pensar que los dos modos tienen espacios de nombre y contenido distintos. Por lo tanto, si, por ejemplo, su código espera ver un cubo foo en particular que contenga una barra de objetos, querrá crear ese cubo/objeto por separado y asegurarse de que contenga un contenido razonable para que el modo desarrollador local funcione como se espera.

-1

Para ejecutarlo "pseudo" localmente (como en una línea de comandos), primero debe implementarlo y luego usar HttpClient para conectarse a su servidor. De esa manera se puede interactuar con el servlet/JSP desde la línea de comandos y no tiene que presentar formularios con archivos adjuntos

Código de la muestra [que sin duda puede ser más creativo que eso]

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

    } 

} 

Ahora usted tendría la capacidad de llamar a su servlet en un bucle, por ejemplo, en lugar de enviar su formulario varias veces

0

Pude encontrar y utilizar el servicio simulado mencionado anteriormente. Desafortunadamente para este hilo, no sé Java. Pero es el uso en Python es como sigue ...

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

(Tenga en cuenta que api_server.py requiere Python 2.7, ya que depende del módulo argparse.)

Alguien tendrá que encontrar la manera de hacer lo mismo en Java. Lo siento. :(

EDIT: El api_server.py está en el directorio de base:

$ python2.7 google_appengine/api_server.py 
Cuestiones relacionadas