File upload 将文件直接保存到AmazonS3时出现上载HTTP错误(403)

File upload 将文件直接保存到AmazonS3时出现上载HTTP错误(403),file-upload,amazon-s3,uploadify,http-status-code-403,File Upload,Amazon S3,Uploadify,Http Status Code 403,以下是我的代码,可以直接将文件上传到: $(函数(){ $('#文件上传')。上传({ “requeueErrors”:true, 'fileDataName':'file', 'method':'post', 'formData':{ 'key':'uploads/${filename}', 'AWSAccessKeyId':'xxxxxxxxxxxxxxxxxxxx', ‘bucket’:‘mybucket’, 'acl':'authenticated read', “政策”:“XXXXX

以下是我的代码,可以直接将文件上传到:


$(函数(){
$('#文件上传')。上传({
“requeueErrors”:true,
'fileDataName':'file',
'method':'post',
'formData':{
'key':'uploads/${filename}',
'AWSAccessKeyId':'xxxxxxxxxxxxxxxxxxxx',
‘bucket’:‘mybucket’,
'acl':'authenticated read',
“政策”:“XXXXXXXXXXXXXX”,
“签名”:“XXXXXXXXXXXX”,
“内容类型”:“文本”
},
'fileObjName':'file',
'cancelImg':'cancel.png',
“上传者”:http://mybucket.s3.amazonaws.com',
'swf':'uploadify.swf',
“自动”:false,
“文件类型”:“文本”,
“onUploadStart”:函数(文件)
{
console.log('正在尝试上载:'+file.name);
},
“onUploadSuccess”:函数(文件、数据、响应)
{
警报('文件保存到:'+数据);
}
});
});

当我尝试将文件上载到时,出现以下错误:HTTP错误(403)
请帮助解决代码中的问题。

我也在使用uploadify在Amazon S3上上传文件,我建议您尝试实施我的策略


首先我使用uploadify在我的服务器上上传文件,然后将它们上传到Amazon S3,上传后我从服务器上删除上传的文件,这是一个简单的方法编辑:看起来我使用的是uploadify的旧版本,不确定我的答案现在有多准确。将很快更新

我正在为另一个问题寻求帮助,但我想我会停下来帮你一点

我看到您在uploader参数中设置了amazon url:

'uploader'     : 'http://mybucket.s3.amazonaws.com',
'swf'          : 'uploadify.swf',
我有一些不同的东西可以很好地工作,我在其他示例中也看到uploader链接到uploadify.swf,脚本链接到您希望上传的路径

像这样:

'uploader'  : '/resources/js/uploadify/uploadify.swf',
'script'    : '<?php echo $uploadPath; ?>',
下面是一个完整的例子,说明我所拥有的和有效的方法:

$('#file_mainfile').uploadify({
    'uploader'  : '<?php echo WPDEPOSIT_URL; ?>/resources/js/uploadify/uploadify.swf',
    'script'    : '<?php echo $uploadPath; ?>',
    'cancelImg' : '<?php echo WPDEPOSIT_URL; ?>/resources/images/cancel.png',
    'folder'    : '<?php echo $fileFolder; ?>',
    'auto'      : true,
    'fileExt'   : '*.zip',
    'buttonText': '<?php _e('Upload .zip', WPD_SHOPPER_NAME); ?>',
    'method'    : 'post',
    'fileDataName'  : 'file',
    'auto'          : 'true',
    'scriptData' : {
            "AWSAccessKeyId"                                : "<?php echo $amazonClass->AWS_ACCESS_KEY; ?>",
            "key"                       : "${filename}",
            "acl"                       : "public-read",
            "policy"                    : "<?php echo $policy; ?>",
            "signature"                 : "<?php echo $signature; ?>",
            "success_action_status"                         : "201",
            "key"                       : encodeURIComponent(encodeURIComponent("<?php echo $folder; ?>${filename}")),
            "fileext"                   : encodeURIComponent(encodeURIComponent("")),
            "Filename"                  : encodeURIComponent(encodeURIComponent(""))
    },
    'onError'     : function (event,ID,fileObj, response) {

    },
    'onComplete': function(event, ID, fileObj, response, data) {
            var filePath = $(response).find("location").text();
            displayMessage('success', 'file_mainfile', '<?php _e('Successfully uploaded to Amazon S3 server.', WPD_QA_NAME); ?>', filePath);
            window.wpds_thumbnail = filePath;

    }
});
$('#file_mainfile')。上传({
“uploader”:“/resources/js/uploadify/uploadify.swf”,
“脚本”:“,
“cancelImg”:“/resources/images/cancel.png”,
'文件夹':'',
“自动”:正确,
“fileExt”:“*.zip”,
“按钮文本”:“,
'method':'post',
'fileDataName':'file',
'auto':'true',
“脚本数据”:{
“AWSAccessKeyId”:“,
“键”:“${filename}”,
“acl”:“公共读取”,
“政策”:“政策”,
“签字”:“,
“成功行动状态”:“201”,
“键”:encodeURIComponent(encodeURIComponent(${filename})),
“fileext”:encodeURIComponent(encodeURIComponent(“”),
“文件名”:encodeURIComponent(encodeURIComponent(“”))
},
“onError”:函数(事件、ID、fileObj、响应){
},
“onComplete”:函数(事件、ID、fileObj、响应、数据){
var filePath=$(响应).find(“位置”).text();
显示消息('success','file\u mainfile','',filePath);
window.wpds\u缩略图=文件路径;
}
});

我将所有内容上传到一个单独的文件夹中,这就是为什么您会在代码中看到一个文件夹变量。

我遇到了同样的问题,并使用以下方法解决

  • 我使用的是ubuntu,所以我使用wireshark找到了s3返回的错误xml。这个错误让我们知道出了什么问题
  • 错误告诉我acl已经在策略文档中,所以它不应该是n formData。检查是否有相同的

  • 谢谢赛义德的提示。不知怎的,你提到的东西不是我的要求(我的要求是直接上传到S3)。谢谢你的回复。希望它能工作,不知何故我使用ColdFusion而不是PHP,不知何故我也熟悉PHP。目前我正在执行其他重要的开发任务。我将很快尝试你的考试,并让你知道结果。:)是的,关于将文件上载到S3的
    脚本
    您是绝对正确的,但我认为这在Uploadify的旧版本中是受支持的,请查看Uploadify的文档,您再也找不到
    脚本
    选项:。如果可能的话,只要你有时间这样做,请发送我的uploadify版本下载(正是你正在使用的)。愿它有帮助。再次感谢,我感谢你的帮助。
    $uploadPath = 'http://s3.amazonaws.com/' . $bucket;
    
    $('#file_mainfile').uploadify({
        'uploader'  : '<?php echo WPDEPOSIT_URL; ?>/resources/js/uploadify/uploadify.swf',
        'script'    : '<?php echo $uploadPath; ?>',
        'cancelImg' : '<?php echo WPDEPOSIT_URL; ?>/resources/images/cancel.png',
        'folder'    : '<?php echo $fileFolder; ?>',
        'auto'      : true,
        'fileExt'   : '*.zip',
        'buttonText': '<?php _e('Upload .zip', WPD_SHOPPER_NAME); ?>',
        'method'    : 'post',
        'fileDataName'  : 'file',
        'auto'          : 'true',
        'scriptData' : {
                "AWSAccessKeyId"                                : "<?php echo $amazonClass->AWS_ACCESS_KEY; ?>",
                "key"                       : "${filename}",
                "acl"                       : "public-read",
                "policy"                    : "<?php echo $policy; ?>",
                "signature"                 : "<?php echo $signature; ?>",
                "success_action_status"                         : "201",
                "key"                       : encodeURIComponent(encodeURIComponent("<?php echo $folder; ?>${filename}")),
                "fileext"                   : encodeURIComponent(encodeURIComponent("")),
                "Filename"                  : encodeURIComponent(encodeURIComponent(""))
        },
        'onError'     : function (event,ID,fileObj, response) {
    
        },
        'onComplete': function(event, ID, fileObj, response, data) {
                var filePath = $(response).find("location").text();
                displayMessage('success', 'file_mainfile', '<?php _e('Successfully uploaded to Amazon S3 server.', WPD_QA_NAME); ?>', filePath);
                window.wpds_thumbnail = filePath;
    
        }
    });