The code works in so far as it allows me to upload a file, but it does not print the list of files already uploaded. Any ideas where I'm going wrong?
from google.appengine.ext import blobstore
from google.appengine.ext import ndb
from google.appengine.ext.webapp import blobstore_handlers
import webapp2
class DatastoreFile(ndb.Model):
data = ndb.BlobProperty(required=True)
mimetype = ndb.StringProperty(required=True)
filename = ndb.StringProperty(required=True)
timestamp = ndb.DateTimeProperty(required=True,auto_now_add=True)
class MainHandler(webapp2.RequestHandler):
def get(self):
upload_url = blobstore.create_upload_url('/upload_file')
files = DatastoreFile.query().order(-DatastoreFile.timestamp)
for file in files:
self.response.write('<li> %s' % file.filename)
self.response.write("""
<html><body>
<form action="{0}" method="POST" enctype="multipart/form-data">
Upload File: <input type="file" name="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
</body></html>""".format(upload_url))
class UploadFile(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
file_data = self.request.POST.get('file_data', None)
if file_data is not None:
entity = DatastoreFile(
data=file_data.value,
filename=file_data.filename,
mimetype=file_data.type
)
entity.put()
response = {
'filename': entity.filename,
'timestamp': str(entity.timestamp),
'key': entity.key.urlsafe()
}
else: # no files were received
response = {'error': 'file not received'}
self.redirect('/')
app = webapp2.WSGIApplication([
('/', MainHandler),
('/upload_file', UploadFile),
], debug=True)