谷歌应用引擎;上传到blobstore会出现404错误

时间:2014-03-03 21:15:08

标签: python google-app-engine blobstore

我正在使用GAE和Python 2.7建立一个网站,可以将带有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

有没有人遇到过这个?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

/ajax/blob网址获取成功网址,然后调用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?),以防用户花费很长时间填写表单。

答案 2 :(得分:0)

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