2014-03-03 64 views
1

我使用GAE的Python 2.7,使網站可以上傳一個文件,ASCII數據的Blob存儲區。 我使用該代碼,這是幾乎一樣的部分完整的示例應用程序下的教程中給出:谷歌應用程序引擎;上傳到Blob存儲提供了404錯誤

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 

有沒有人碰到這之前?

回答

2

您使用create_upload_url()獲得的網址有一定的超時時間(which is 10 minutes),所以如果您在網頁加載時檢索此網址並需要一段時間上傳實際數據,它最終會過期並返回404。會建議您在上傳數據之前獲取上傳網址。

1

我們通過實現少量的Javascript其中每9分鐘發送一個Ajax請求發回一個新斑塊上傳網址並交換了形式的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的?)形成。

+1

什麼樣的對象是'#uploadUrl'? –

+1

#uploadUrl是包含要上傳到最終去到URL隱藏字段。 – edhgoose

相關問題