Я хочу отправить 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 на сервере и вставить все данные в файле в хранилище данных?
Спасибо.