Webapp后台文件上传到App Engine Blobstore

时间:2013-06-19 02:56:07

标签: javascript html5 google-app-engine blobstore google-cloud-storage

我想在同一个App Engine域上托管的AJAX专注的webapp中处理大型文件上传到App Engine(Blobstore - > Google Cloud Storage)。

在浏览器javascript客户端中,我调用App Engine服务器并接收响应的URL(从'create_upload_url'创建)但我仍然坚持如何获取我的文件并将其上传到该URL而不会出现跨域错误。我似乎无法在Blobstore接收器上设置CORS标头,并且该域与我的应用所服务的域不匹配('create_upload_url'将'1-dot-'附加到子域的前缀)。

对此有任何想法或经验吗?

一个想法:因为“1-dot-”前缀似乎只是指特定的部署版本,也许如果我解析网址并删除任何类似的前缀以使域名相同并提交到该网址以避免域名不匹配。

2 个答案:

答案 0 :(得分:1)

感谢你提出这个问题。这是由于请求处理的当前性质,我们正在考虑将其作为头脑风暴以找出最佳前进方式的错误。

目前,如果用户向

发出请求
https://myappid.appspot.com/_ah/api/myApi/v1/methodpath

然后由Google的API基础设施路由到

https://version-dot-myappid.appspot.com/_ah/spi/MyApi.Method

其中versionmyappid应用程序的默认版本。

更新:以前建议的解决方法la How do I parse a URL into hostname and path in javascript?已被证明不起作用。这是因为调用create_upload_url的App Engine实例“知道”它是哪个版本/主机,因此更改它会导致错误。

答案 1 :(得分:1)

在我的程序中,此问题仅在某些情况下发生 ,并且仅在线,而不是在开发服务器中。我得到了问题的根源,但是它是一个错误的引擎

在页面的javascript中我有:

$.ajax({
          type: "POST",
          url: upload_url,
          data: formData,
          contentType: false,
          processData: false
            })....

我从python代码中获取upload_url:upload_url = blobstore.create_upload_url('/ uploadDragImage')

当我打电话给那个页面时: https://comunapp-dot-skilled-999.appspot.com/item?categ=news

ajax调用工作正常,但如果我添加一个参数:

https://comunapp-dot-skilled-999.appspot.com/item?categ=news&安培;皮波

生成的upload_url似乎没有意义,ajax调用得到此错误:

  

混合内容:页面位于   'https://comunapp-dot-skilled-999.appspot.com/item?categ=news&luca'   是通过HTTPS加载的,但是请求了一个不安全的XMLHttpRequest   端点'http://temporary-blobstore-error.appspot.com/'。这个请求   已被封锁;内容必须通过HTTPS提供。

'&'在页面的url中打破了url的生成:blobstore.create_upload_url('/ uploadDragImage')

注意:开发服务器工作,问题只在线

一种可能的解决方案是避免使用&,并使用其他东西来分隔参数