Google App Engine:上传到 Blobstore 时出现 404 错误

1 投票
3 回答
1499 浏览
提问于 2025-04-17 20:41

我正在使用Python 2.7的Google App Engine(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

有没有人遇到过这个问题?

3 个回答

0

这个演示里有几个小问题。最直接的问题是,它需要你先登录。你可以通过这个链接 http://localhost:8080/_ah/login 来登录(然后点击登录按钮)。登录后,你需要手动返回这个链接 http://localhost:8080/。这样演示就应该能正常工作了。

1

我们通过实现一小段JavaScript代码解决了这个10分钟超时的问题。每隔9分钟,它会发送一个ajax请求到一个网址,这个网址会返回一个新的文件上传链接,并更新表单。

/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

你通过 create_upload_url() 获取的这个网址是有时间限制的(限制是10分钟),所以如果你在网页加载的时候就获取了这个网址,但上传数据花了很长时间,网址就会过期,最后会返回404错误。我建议你在上传数据之前再去获取这个上传网址。

撰写回答