Загрузите с Android на Python AppEngine и прочитайте файл - PullRequest
0 голосов
/ 12 декабря 2011

Я хочу отправить CSV-файл из Android в Python AppEngine.Я использую API Blobstore и для отправки файла я использую MultipartEntity, HttpPost и HttpGet.

Итак, согласно API Blobstore, вы должны вызвать метод create_upload_url('/upload') длясоздайте URL для загрузки файла, и вы используете этот URL как действие для загрузки файла.Как вы можете прочитать здесь

Что я делаю?Я вызываю метод, который создает этот URL-адрес и возвращает его в мое приложение для Android.И с этим URL я загружаю файл.

URL-адрес, сгенерированный в следующем формате:

myapp.appspot.com / _ah / upload / a-lot-of-numbers-and-letters /

В основном так:

Код Android

 HttpClient httpClient = new DefaultHttpClient();
 HttpGet httpGet = new HttpGet(mContext.getString("myapp.appspot.com/get_blobstore_url");

 HttpResponse urlResponse = httpClient.execute(httpGet);

 result = EntityUtils.toString(urlResponse.getEntity());

 Uri fileUri = Uri.parse("file:///sdcard/dir/myfile.csv"); // Gets the Uri of the file in the sdcard
 File file = new File(new URI(fileUri.toString())); // Extracts the file from the Uri

 FileBody fileBody = new FileBody(file, "multipart/form-data");

 MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
 entity.addPart("file", fileBody);

 HttpPost httpPost = new HttpPost(result);

 httpPost.setEntity(entity);

 HttpResponse response = httpClient.execute(httpPost);
 response.getStatusLine();

Код AppEngine

# Returns only the URL in which the file will be uploaded, so this URL may be used in client for upload the file
class GetBlobstoreUrl(webapp.RequestHandler):
    def get(self):
        logging.info('here')
        upload_url = blobstore.create_upload_url('/upload')
        logging.info("url blob %s", upload_url)
        self.response.out.write(upload_url)

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        logging.info('inside upload handler')
        upload_files = self.get_uploads('file')
        blob_info = upload_files[0]
        return blob_info.key()

def main():
    application = webapp.WSGIApplication([('/upload', UploadHandler), ('/get_blobstore_url', GetBlobstoreUrl)], debug=True)
    run_wsgi_app(application)

if __name__ == '__main__':
    main()

Вопрос 1

Когда я отправляю файл на URL-адрес, который вернул AppEngine, это автоматически вызовет метод сервера UploadHandler?Поскольку сообщение журнала внутри этого метода не отображается, и файл вставляется , и ответ, который я получаю при загрузке файла с созданным URL-адресом, является ошибкой 404, почему эта ошибка, если файлзагружается?

Вопрос 2

После того, как я загрузил файл, как я могу проанализировать файл csv на сервере и вставить все данные в файле в хранилище данных?

Спасибо.

1 Ответ

0 голосов
/ 15 декабря 2011

Когда я отправляю файл на URL, который вернул AppEngine, это будет автоматически вызывать метод сервера UploadHandler?

Correct.

Когда я отправляю файл на URL, который вернул AppEngine, это будет автоматически вызывать метод сервера UploadHandler?

Покажите нам журналы вашего сервера - за какой URL вы получаете 404? Получаете ли вы какие-либо сообщения журнала от обработчика загрузки?

После того, как я загрузил файл, как я могу разобрать файл csv на сервере и вставить все данные из файла в хранилище данных?

Используйте BlobReader API и передайте открытый файл в модуль python csv.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...