2012-03-17 16 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 क्लाउड संग्रहण फ़ाइल का उपयोग करने के लिए कैसे पता है किसी भी एक है?

उत्तर

7

ऐप इंजन डेवलपर परीक्षण वातावरण Google क्लाउड स्टोरेज के स्थानीय सिमुलेशन का समर्थन करता है लेकिन असली चीज़ को आरपीसी पहुंच प्रदान नहीं करता है। इसलिए, आपका कोड दोनों वातावरण में काम करना चाहिए, लेकिन आपको दो मोडों के बारे में सोचना चाहिए क्योंकि अलग-अलग नाम रिक्त स्थान और सामग्री है। इसलिए, उदाहरण के लिए, आपका कोड ऑब्जेक्ट बार युक्त एक विशेष बाल्टी फू को देखने की अपेक्षा करता है, तो आप उस बाल्टी/ऑब्जेक्ट को अलग से बनाना चाहते हैं और सुनिश्चित करें कि इसमें स्थानीय डेवलपर मोड अपेक्षा के अनुसार काम करने के लिए उचित सामग्री शामिल है।

-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

मैं ऊपर वर्णित अनुरूपित सेवा को खोजने और उपयोग करने में सक्षम था। दुर्भाग्यवश इस धागे के लिए, मुझे जावा नहीं पता। लेकिन यह अजगर में उपयोग इस प्रकार है है ...

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

(ध्यान दें कि api_server.py अजगर 2.7 की आवश्यकता है क्योंकि यह argparse मॉड्यूल पर निर्भर करता है।)

किसी और कैसे करना है यह पता लगाने करना होगा जावा में वही माफ़ कीजिये। :(

संपादित करें: api_server.py आधार निर्देशिका में है:

$ python2.7 google_appengine/api_server.py 
संबंधित मुद्दे