Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用fineuploader for amazon s3时接收无效的策略文档或请求标头错误_Php_Amazon S3_Fine Uploader - Fatal编程技术网

Php 使用fineuploader for amazon s3时接收无效的策略文档或请求标头错误

Php 使用fineuploader for amazon s3时接收无效的策略文档或请求标头错误,php,amazon-s3,fine-uploader,Php,Amazon S3,Fine Uploader,我正在尝试使用FineUploader的新功能,允许直接上传到AmazonS3。目前,我无法上传照片。我得到一个错误: “无效的策略文档或请求标题!” 开发人员要求将问题发布在stackoverflow 我遵循他们在本页上的指示: 在设置过程中,我还模拟了链接到那里的示例文件: 我用很少的选项设置了javascript: $('#fineuploader-s3')。fineuploader 3({ 请求:{ 端点:“http://thenameofmybucket.s3.amazonaws.

我正在尝试使用FineUploader的新功能,允许直接上传到AmazonS3。目前,我无法上传照片。我得到一个错误: “无效的策略文档或请求标题!”

开发人员要求将问题发布在stackoverflow

我遵循他们在本页上的指示:

在设置过程中,我还模拟了链接到那里的示例文件:

我用很少的选项设置了javascript:

$('#fineuploader-s3')。fineuploader 3({
请求:{
端点:“http://thenameofmybucket.s3.amazonaws.com",
accessKey:“mypublicaccesskey”
},
签名:{
端点:“s3demo.php”
},
iframeSupport:{
localBlankPagePath:“/success.html”
},
cors:{
预期:正确
}
});
我知道有很多地方我可能会出问题。我以前从未使用过s3或fineuploader,如果这些都是愚蠢的问题,那么很抱歉。但这里是我在设置时感到最困惑的地方。我觉得问题在于#1:

(1) 在示例javascript中,签名路径是如何设置的:

//必需:可以对请求进行签名的本地服务器的路径。
签名:{
端点:“/s3/signtureHandler”
},
我不确定这是一个空文件,其中创建了一些json,还是应该指向php脚本,其中创建json的函数是,在我的例子中是s3demo.php,我直接复制了它

(2) 在s3demo.php文件中,我只更改了以下几行:

$clientPrivateKey=$\u服务器['I将我的私钥放在这里'];
$expectedBucket=”http://thenameofmybucket.s3.amazonaws.com";
函数handleReflightedRequest(){
//如果您依赖CORS,则需要在此处调整允许的域。
标题('Access-Control-Allow-Origin:http://mywebsitename.org');
}
(3) 这就是我的CORS文件,我不确定它是否正确,因为说明页面上的示例不包括标记:


http://mywebsitename.org
邮递
3000
*
(4) 如说明中所述,我进入IAM面板并创建了一个组,其中的策略完全是从说明中复制的,但实际名称是我的bucket:

{
“版本”:“2012-10-17”,
“声明”:[{
“效果”:“允许”,
“操作”:“s3:PutObject”,
“资源”:“arn:aws:s3:::thenameofmybucket/*”
}]
}
,然后是一个用户,我从中获得了javascript和php文件中分别使用的公共和私有访问密钥


我希望这里有一些明显的错误。感谢您的时间。

如果我理解正确,您在尝试签署简单上载请求时,会看到“无效策略文档…”消息客户端。您还使用了提供的PHP服务器端示例

我在更改中看到的最大问题是
$expectedBucket
变量。您的bucket不是“”,而是“thenameofmybucket”。最有可能的情况是,服务器端代码拒绝了策略,因为它需要一个名为“”的bucket,而我确信您的bucket实际上名为“thenameofmybucket”。将该行更改为
$expectedBucket=”名为“

另外,根据您的问题,不清楚您将客户端密钥存储在何处。如果您的密钥是,比如说,“12345”,您是否有一行这样的代码

$clientPrivateKey=$\u服务器['12345];

如果是这样,这是服务器端代码的另一个问题。PHP中的
$\u服务器
superglobal正在查找名为“12345”的环境变量“那大概是你的秘密钥匙。如果您没有设置这样的变量,那么您可以这样做,或者只需将
$clientPrivateKey
的值设置为您的密钥

另外,您是否真的在跨源环境中工作?看起来你不是。如果是这样,那么在PHP示例中不需要任何标记为“CORS”或“跨源”或“跨域”的内容

更新:

如果未设置上载的任何大小限制,则还应将
$expectedMaxSize
全局设置为
null
。我们正在通过一些改进和澄清来更新now,这些改进和澄清将在将来帮助其他人。

回答问题(1)。
signature.endpoint
选项应该指向php脚本。感谢您捕获所有这些错误。我更改了$expectedBucket,并用我的钥匙修复了代码行。但我仍然会遇到同样的错误,所以我猜还有其他问题。谢谢你的提问——不幸的是,没有。我需要从php示例中删除一些与CORS相关的代码吗?这取决于具体情况。也许不是。你现在看到的是什么问题?请发布问题的更新,并说明您看到的错误和客户端控制台日志。在收集客户端日志之前,添加一个值为true的
debug
选项也可能对您有用。我是按照您的要求加入聊天室的,但我想我不能在聊天室聊天,因为我需要20的声誉?也许我不明白如何使用聊天室。我会尽量不把堆栈溢出认为我不是真的给20分这件事当回事。无论如何,是的,就是这样。我关闭了验证客户端,只是为了使测试尽可能简单。当我注释掉php文件设置expectedMaxSize中的代码行时,它完全起作用了。非常感谢。