我想从Android发送一个csv文件到Python AppEngine。我正在使用Blobstore API并发送文件,我使用MultipartEntity
,HttpPost
和HttpGet
。
因此,根据Blobstore API,您必须调用方法create_upload_url('/upload')
来生成上传文件的网址,并使用此网址作为操作来上传文件。正如您可以阅读here
我在做什么?我调用一个创建此url的方法并将其返回到我的Android应用程序。使用此URL我上传文件。
生成的网址采用以下格式:
myapp.appspot.com/_ah/upload / 一批量-的号码和 - 字母/
基本上是这样的:
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
当我将文件发送到AppEngine返回的url时,这会自动调用服务器方法UploadHandler吗?因为没有显示此方法中的日志消息,并且正在插入文件,并且在使用生成的url上传文件时获得的响应是404错误,如果文件出现该错误的原因正在上传?
问题2
上传文件后,如何解析服务器中的csv文件并将文件中的所有数据插入数据存储区?
感谢。
答案 0 :(得分:0)
当我将文件发送到AppEngine返回的url时,这将是 自动调用服务器方法UploadHandler?
正确。
当我将文件发送到AppEngine返回的url时,这将是 自动调用服务器方法UploadHandler?
向我们展示您的服务器日志 - 您获取404的网址是什么?你从上传处理程序那里得到任何日志消息吗?
上传文件后,如何解析服务器中的csv文件 并将文件中的所有数据插入数据存储区?
使用BlobReader API,并将打开的文件传递给python csv
模块。