我正在關注亞馬遜s3圖片上傳教程here。一切似乎都很好。我的簽名url響應返回200狀態碼。但是,上一次上傳功能正在拋出403狀態碼。PUT http請求403錯誤亞馬遜s3圖片上傳
function upload_file(file, signed_request, url){
var xhr = new XMLHttpRequest();
xhr.open("PUT", signed_request);
xhr.setRequestHeader('x-amz-acl', 'public-read');
xhr.onload = function() {
if (xhr.status === 200) {
document.getElementById("preview").src = url;
document.getElementById("avatar_url").value = url;
}
};
xhr.onerror = function() {
alert("Could not upload file.");
};
xhr.send(file);
}
錯誤在這裏請求
xhr.open("PUT", signed_request);
我檢查我的網絡和看到一個200個狀態碼傳遞類型選項的成功響應拋出。但是,具有相同頭和屬性的PUT類型的最後一次重新獲取失敗。
我的鑰匙在下面
@app.route('/sign_s3/')
def sign_s3():
AWS_ACCESS_KEY = 'MY_AWS_ACCESS_KEY' # string
AWS_SECRET_KEY = 'MY_AWS_SECRET_KEY' #string
S3_BUCKET = 'MY_S3_BUCKET' # string
object_name = urllib.quote_plus(request.args.get('file_name'))
mime_type = request.args.get('file_type')
expires = int(time.time()+60*60*24)
amz_headers = "x-amz-acl:public-read"
string_to_sign = "PUT\n\n%s\n%d\n%s\n%s\n%s" % (mime_type, expires, amz_headers, S3_BUCKET, object_name)
print "%s" %string_to_sign
signature = base64.encodestring(hmac.new(AWS_SECRET_KEY.encode(), string_to_sign.encode('utf8'), sha1).digest())
signature = urllib.quote_plus(signature.strip())
url = 'https://%s.s3.amazonaws.com/%s' % (S3_BUCKET, object_name)
content = json.dumps({
'signed_request': '%s?AWSAccessKeyId=%s&Expires=%s&Signature=%s' % (url, AWS_ACCESS_KEY, expires, signature),
'url': url,
})
return content
請我在哪裏可以得到我的錯蟒蛇sign_s3功能的代表?我在本地主機上運行我的燒瓶服務器,地址爲http://127.0.0.1:8080/。請問我哪裏錯了?任何幫助,將不勝感激。
假設你的訪問和祕密密鑰是正確的 - 您需要顯示如何生成簽名的完整源代碼。您在簽名請求期間是否生成HMAC? – birryree
@birryree我已更新我的代碼。請參閱上文。謝謝 –
403身上有什麼? – Mircea