【问题标题】:google app engine; upload to blobstore gives 404 error谷歌应用引擎;上传到 blobstore 会出现 404 错误
【发布时间】:2014-03-03 21:15:08
【问题描述】:

我正在使用带有 Python 2.7 的 GAE 来制作一个可以将带有 ascii 数据的文件上传到 blobstore 的网站。 我为此使用的代码与教程中完整示例应用程序部分中给出的代码几乎相同:

https://developers.google.com/appengine/docs/python/blobstore/#Python_Complete_sample_application

大多数情况下,上传过程运行良好。但是,有时我会收到以下错误消息:

 404 Not Found
 The resource could not be found.
 No such upload session: agtkZXZ-b3BlbnZpenIiCxIVX19CbG9iVXBsb2FkU2Vzc2lvbl9fGICAgICA0IcLDA

以前有人遇到过这种情况吗?

【问题讨论】:

    标签: python google-app-engine blobstore


    【解决方案1】:

    您使用create_upload_url() 获取的 URL 具有一定的超时时间 (which is 10 minutes),因此如果您在加载网页时检索此 URL,并且需要一段时间才能上传实际数据,它最终会过期并返回404.我建议你在上传数据之前获取上传URL。

    【讨论】:

      【解决方案2】:

      我们通过实施少量 Javascript 解决了这个 10 分钟超时问题,每 9 分钟向 URL 发送一个 ajax 请求,该 URL 发送回一个新的 blob 上传 URL 并换出表单。

      /ajax/blob URL 接受一个成功 url,然后调用 create_upload_url() 并将其作为 ajax 数据对象返回。

      这是我们编写的 Javascript:

      if ($('#blobUploadForm').length > 0) {
          setTimeout(_getNewBlobstoreUrl, 9 * 1000 * 60 * 60); // 9 minutes
      } //do nothing if there is no uploadUrl id
      
      function _getNewBlobstoreUrl() {
      var successUrl = $('#uploadUrl').attr('value');
      
      if (typeof successUrl == 'undefined') {
          return;
      }
      
      var url = "/ajax/blob?url=" + successUrl;
      
      $.ajax({
          url: url,
          dataType: "json",
          cache: false,
          async: true,
          success: _getNewBlobstoreUrlSuccess,
          error: _getNewBlobstoreUrlError
      })
      
      
      function _getNewBlobstoreUrlSuccess(data) {
          if (data.url) {
              //change the action to a new action
              $('#blobUploadForm').attr('action', data.url)
          }
      }
      
      function _getNewBlobstoreUrlError(err) {
            // do something
      }
      

      最后不要忘记再次设置超时时间(或使用 setInterval?),以防用户需要很长时间才能填写表单。

      【讨论】:

      • #uploadUrl是什么对象?
      • #uploadUrl 是一个隐藏字段,其中包含您希望上传最终转到的 URL。
      【解决方案3】:

      演示中有一些错误。最接近的一个是它希望您登录。通过http://localhost:8080/_ah/login 登录(然后按登录按钮)。您需要手动导航回http://localhost:8080/ 之后演示应该可以工作。

      【讨论】:

        猜你喜欢
        • 2014-07-11
        • 2023-03-25
        • 2014-04-04
        • 2016-10-20
        • 2012-06-11
        • 2011-04-18
        • 2016-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多