Created
July 20, 2017 18:46
-
-
Save cdman/40829592eae747f63496a937e2b0fa76 to your computer and use it in GitHub Desktop.
Example for Blobstore Upload brokenness
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
runtime: python27 | |
api_version: 1 | |
threadsafe: yes | |
service: upload-test | |
handlers: | |
- url: .* | |
script: main.app | |
libraries: | |
- name: webob | |
version: "1.2.3" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from google.appengine.api import users | |
from google.appengine.ext import blobstore | |
from google.appengine.ext import ndb | |
from google.appengine.ext.webapp import blobstore_handlers | |
import logging | |
import webapp2 | |
# This datastore model keeps track of which users uploaded which photos. | |
class UserPhoto(ndb.Model): | |
user = ndb.StringProperty() | |
blob_key = ndb.BlobKeyProperty() | |
class PhotoUploadFormHandler(webapp2.RequestHandler): | |
def get(self): | |
# [START upload_url] | |
upload_url = blobstore.create_upload_url('/upload_photo') | |
# [END upload_url] | |
# [START upload_form] | |
# To upload files to the blobstore, the request method must be "POST" | |
# and enctype must be set to "multipart/form-data". | |
self.response.out.write(upload_url) | |
# [END upload_form] | |
# [START upload_handler] | |
class PhotoUploadHandler(blobstore_handlers.BlobstoreUploadHandler): | |
def post(self): | |
import pdb; pdb.set_trace() | |
try: | |
upload = self.get_uploads()[0] | |
user_photo = UserPhoto( | |
user=users.get_current_user().user_id(), | |
blob_key=upload.key()) | |
user_photo.put() | |
self.redirect('/view_photo/%s' % upload.key()) | |
except: | |
logging.exception('Error!') | |
self.error(500) | |
# [END upload_handler] | |
# [START download_handler] | |
class ViewPhotoHandler(blobstore_handlers.BlobstoreDownloadHandler): | |
def get(self, photo_key): | |
if not blobstore.get(photo_key): | |
self.error(404) | |
else: | |
self.send_blob(photo_key) | |
# [END download_handler] | |
app = webapp2.WSGIApplication([ | |
('/', PhotoUploadFormHandler), | |
('/upload_photo', PhotoUploadHandler), | |
('/view_photo/([^/]+)?', ViewPhotoHandler), | |
], debug=True) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
21:44 $ cat upload.py | |
# -*- coding: utf-8 -*- | |
import requests | |
import sys | |
response = requests.get(sys.argv[1]) | |
upload_url = response.content | |
response = requests.post(upload_url, files={'file': (u'línea.csv', 'test', 'text/csv')}) | |
print(response.content) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment