Google App Engine:上传到 Blobstore 时出现 404 错误
我正在使用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错误。我建议你在上传数据之前再去获取这个上传网址。