google blobstore 没有此类上传会话错误
No such upload session error with google blobstore
我正在尝试上传图片,然后在点击提交按钮时重定向到另一个页面。但是当我在浏览器中使用后退按钮并再次上传图像时,我得到一个 404 Not Found 找不到资源。没有这样的上传会话
我到处搜索以解决此问题,但找不到任何有效的解决方案。这是我的代码:
class PhotoUploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
try:
upload = self.get_uploads()[0]
user_photo = Image(blob_key=upload.key())
user_photo.put()
self.redirect('/view_photo/%s' % upload.key())
except:
self.error(500)
class ViewPhotoHandler(Handler, blobstore_handlers.BlobstoreDownloadHandler):
def get(self, photo_key):
if not blobstore.get(photo_key):
self.error(404)
else:
image = images.get_serving_url(photo_key, size=None, crop=False, secure_url=None, filename=None, rpc=None)
self.render('edit.html', image_key=image)
class MainHandler(Handler):
def get(self):
upload_url = blobstore.create_upload_url('/upload_photo')
params = {'upload_url': upload_url,}
self.render('imagify.html', **params)
返回后我可以上传图片的唯一方法是重新加载该页面。在不手动重新加载页面的情况下执行此操作的方法是什么?到处寻找之后,它看起来像是 blobstore 的问题。请帮忙
上传URL只有效一次,执行第一次上传后失效。 URL 的唯一性是 blobstore 为每个上传的文件生成唯一的 blob ID 所依赖的。
当您使用浏览器中的后退按钮并点击缓存表单的提交按钮时,您实际上是在重新使用之前上传会话的 URL,这就是您收到错误的原因。
当您重新加载页面时,将重新生成表单并包含新生成的上传 URL,可用于下一次上传。
我添加了这两行以在 MainHandler
中设置 headers
self.response.headers.add_header("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0")
self.response.headers.add_header("Expires","0")
我不再收到错误,但这只能部分解决问题。如果我使用后退按钮返回,则会启动一个新的 session,因此用户将不得不重新填写表格。但是不可能在用户返回时保留数据,然后在相同的 session 中提交具有相同数据的表单。此解决方案暂时可用。
使用Jquery刷新页面。
Force reload/refresh when pressing the back button
临时存储字段中的数据并在重新加载后填充。
How to get JS variable to retain value after page refresh?
我正在尝试上传图片,然后在点击提交按钮时重定向到另一个页面。但是当我在浏览器中使用后退按钮并再次上传图像时,我得到一个 404 Not Found 找不到资源。没有这样的上传会话
我到处搜索以解决此问题,但找不到任何有效的解决方案。这是我的代码:
class PhotoUploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
try:
upload = self.get_uploads()[0]
user_photo = Image(blob_key=upload.key())
user_photo.put()
self.redirect('/view_photo/%s' % upload.key())
except:
self.error(500)
class ViewPhotoHandler(Handler, blobstore_handlers.BlobstoreDownloadHandler):
def get(self, photo_key):
if not blobstore.get(photo_key):
self.error(404)
else:
image = images.get_serving_url(photo_key, size=None, crop=False, secure_url=None, filename=None, rpc=None)
self.render('edit.html', image_key=image)
class MainHandler(Handler):
def get(self):
upload_url = blobstore.create_upload_url('/upload_photo')
params = {'upload_url': upload_url,}
self.render('imagify.html', **params)
返回后我可以上传图片的唯一方法是重新加载该页面。在不手动重新加载页面的情况下执行此操作的方法是什么?到处寻找之后,它看起来像是 blobstore 的问题。请帮忙
上传URL只有效一次,执行第一次上传后失效。 URL 的唯一性是 blobstore 为每个上传的文件生成唯一的 blob ID 所依赖的。
当您使用浏览器中的后退按钮并点击缓存表单的提交按钮时,您实际上是在重新使用之前上传会话的 URL,这就是您收到错误的原因。
当您重新加载页面时,将重新生成表单并包含新生成的上传 URL,可用于下一次上传。
我添加了这两行以在 MainHandler
中设置 headersself.response.headers.add_header("Cache-Control", "no-cache, no-store, must-revalidate, max-age=0")
self.response.headers.add_header("Expires","0")
我不再收到错误,但这只能部分解决问题。如果我使用后退按钮返回,则会启动一个新的 session,因此用户将不得不重新填写表格。但是不可能在用户返回时保留数据,然后在相同的 session 中提交具有相同数据的表单。此解决方案暂时可用。
使用Jquery刷新页面。
Force reload/refresh when pressing the back button
临时存储字段中的数据并在重新加载后填充。
How to get JS variable to retain value after page refresh?