Php 字段中的Unicode代码序列格式不正确
我正在尝试使用POST表单将浏览器上载到我的s3存储桶。我正在使用生成策略和签名。这是我的代码:Php 字段中的Unicode代码序列格式不正确,php,amazon-s3,Php,Amazon S3,我正在尝试使用POST表单将浏览器上载到我的s3存储桶。我正在使用生成策略和签名。这是我的代码: $upload = new Signature( self::S3_KEY, self::S3_SECRET, self::S3_BUCKET, self::S3_REGION ); 并使用$upload->getFormInputsAsHtml()方法生成html。这就是生成这样的ht
$upload = new Signature(
self::S3_KEY,
self::S3_SECRET,
self::S3_BUCKET,
self::S3_REGION
);
并使用$upload->getFormInputsAsHtml()
方法生成html。这就是生成这样的html
<form action="//s3.amazonaws.com/bucket" method="POST" enctype="multipart/form-data" class="upload-form">
<input type="hidden" name="Content-Type" value="">
<input type="hidden" name="acl" value="public-read">
<input type="hidden" name="success_action_status" value="201">
<input type="hidden" name="policy" value="eyJleHBpcmF0aW9uIjoiMjAxNy0wMi0xNVQxMzowNDozOFoiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJ0YWdmaSJ9LHsiYWNsIjoicHJpdmF0ZSJ9LFsic3RhcnRzLXdpdGgiLCIka2V5IiwiIl0sWyJzdGFydHMtd2l0aCIsIiRDb250ZW50LVR5cGUiLCIiXSxbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwwLDUyNDI4ODAwMF0seyJzdWNjNzX2FjdGlvbl9zdGF0dXMiOiIyMDEifSx7IngtYW16LWNyZWRlbnRpYWwiOiJBS0lBSkhGS0hKMklLNjZTVFA0QVwvMjAxNzAyMTVcL3VzLWVhc3QtMVwvczNcL2F3czRfcmVxdWVzdCJ9LHsieC1hbXotYWxnb3JpdGhtIjoiQVdTNC1ITUFDLVNIQTI1NiJ9LHsieC1hbXotZGF0ZSI6IjIwMTcwMjE1VDA3MDQzOFoifV19">
<input type="hidden" name="X-amz-credential" value="AKIAJHFKHJ2IK66STP4A/20170215/us-east-1/s3/aws4_request">
<input type="hidden" name="X-amz-algorithm" value="AWS4-HMAC-SHA256">
<input type="hidden" name="X-amz-date" value="20170215T070438Z">
<input type="hidden" name="X-amz-signature" value="e9d30613e4fcab8fec3fe75c4ce2969bb6497d83af7cca7f9ea6a1c0738844c5">
<input type="hidden" name="key" value="${filename}">
</form>
示例请求有效负载
------WebKitFormBoundaryVGEWKAW5D70U2RP内容处置:表单数据;name=“image”;filename=“shop small.png”内容类型:
图像/png
------WebKitFormBoundaryVGEWKAW5D70U2RP内容处置:表单数据;name=“内容类型”
------WebKitFormBoundaryVGEWKAW5D70U2RP内容处置:表单数据;name=“acl”
私人的
------WebKitFormBoundaryVGEWKAW5D70U2RP内容处置:表单数据;name=“成功\行动\状态”
201
------WebKitFormBoundaryVGEWKAW5D70U2RP内容处置:表单数据;name=“策略”
EYJLEHBPCMF0AW9Uijoiny0WMI0xNvqxOxOxOxOxMzOilCJJB25KAXRPB25ZIjBeyjidwnrzQoij0YWDMASj9LhsijoinJJJJ9Lfsc3RhCNRzLxDgPdgIk2V5IiIiIl0SWYZDGFYDT20ACiIrIDB250ZWbNbNbNbNbNbQvUz3RolxDbNbNbNbNbNbNbNbNbWdZ3RolZdJbLbNbNbNbNbNbNbNbWf0LbNbWf0LbWf0LbWf0ZZZZZZZZLbWnzLbWnzLbNbWnzLbWnzLbWnzZZWVMJAXNZAYMTVCL3VZLWVHC3QTMVWVCZNCl2F3CZrFCMVXDWVZDCJ9LHSIEC1HBxOTYWNb3JPDGHTIJOIQVDTNC1ITUFDLvNIQTI1NIJ9LHSIEC1HBxOTZF0ZSI6IJIWMTCWMJE1VDEZMTM1NVOIFv19
------WebKitFormBoundaryVGEWKAW5D70U2RP内容处置:表单数据;name=“X-amz-credential”
AKIAJHFKHJ2IK66STP4A/20170215/us-east-1/s3/aws4_请求
------WebKitFormBoundaryVGEWKAW5D70U2RP内容处置:表单数据;name=“X-amz-algorithm”
AWS4-HMAC-SHA256
------WebKitFormBoundaryVGEWKAW5D70U2RP内容处置:表单数据;name=“X-amz-date”
20170215T131355Z
------WebKitFormBoundaryVGEWKAW5D70U2RP内容处置:表单数据;name=“X-amz-signature”
1c28fb88fc0b1317df11b7f566fe39eaac9b8cba012b8fef80448e93767f2677
------WebKitFormBoundaryVGEWKAW5D70U2RP内容处置:表单数据;name=“key”
测试文件
------WebKitFormBoundary VGEWKAW5D70U2RP--
我不知道问题是什么,也不知道如何解决。我所经历的每个例子都使用类似的过程。提前感谢。我复制了您的“策略”值并粘贴到
默认编码是UTF-8
它无法解码
当我将其更改为ASCII时,结果部分正常
“到期”的“到期”:2017-02-15T13:14:30:38 z,“条件”的“条件”的“条件”的“条件”的“条件”的“条件”的“条件”是:“{”截至”2017-02-02-02-15:30”的“条件”的“条件”是:“{“水桶”的“桶”:”Tagffi,{“acl”的“私有”,[从“开始”,“开始于”、“关键“,,,,,,,,,,,,[从开始开始“,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,UCsC3'
看起来“成功”可能有不同的“e”
尝试在上发布纯文本策略并使用该编码值
或者在这里回复,这样我可以看一看
希望这有帮助我解码了你的base64内容 看起来您的“凭证”字段上有额外的字符。 看起来像 AKIAJHFKHJ2IK66STP4A\/20170215\/us-east-1\/s3\/aws4\U请求 您需要将其更改为
AKIAJHFKHJ2IK66STP4A/20170215/us-east-1/s3/aws4_请求我终于解决了它。尽管我仍然不知道是什么导致了这个问题。我没有使用
$upload->getFormInputsHTML();
来获取表单内容,而是使用$s3Policy=$upload->getFormInputs());
获取策略并单独分配给预先编写的html
<form :action="aws_url" method="POST" enctype="multipart/form-data">
<input type="hidden" name="Content-Type" :value="s3Policy.content_type" />
<input type="hidden" name="acl" :value="s3Policy.acl" />
<input type="hidden" name="success_action_status" :value="s3Policy.success_action_status" />
<input type="hidden" name="policy" :value="s3Policy.policy" />
<input type="hidden" name="X-amz-credential" :value="s3Policy.credential" />
<input type="hidden" name="X-amz-algorithm" :value="s3Policy.algorithm" />
<input type="hidden" name="X-amz-date" :value="s3Policy.date" />
<input type="hidden" name="X-amz-signature" :value="s3Policy.signature" />
<input type="hidden" name="key" :value="s3Policy.key" />
<input type="file" name="file">
<input type="submit" value="Upload">
</form>
这可能是因为我的前端出现了
vuejs
,但是html在开发控制台中看起来很好。这是因为我删除了几个字符。如果您能给我完整的base64编码值,我将非常乐意帮您解决问题。eyjlehbpcmf0aw9uijoimjaxny0wmi0xnvqxmzo0odoxofilcjb25kaxrpb25zijbeyjidwnrzqioIJ0YWDMASJ9LHSIYWNSIJJJ9LfsIc3RhcnRzLxDgGilCika2V5IIIl0SWYJzDGFydHmTd2LcIrB250ZW50LvR5cGcGuiIxBnVbNbnRbNbNbNbNbNbNbNbNbNbNbNbNbQbGbVbWbWbNbNbWbWbWdUdUdUdUdUdUdUy3RdUdUdUd2RdUdUd4RdUdUdUdUdUdUdUdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdRdDTNC1ITUFDLVNIQTI1NIJ9LHSIEC1HBXOTZGF0ZSI6IJIWMTCWMJMJE1VDA3NDGXOFIFV19是同一个错误。我猜这些反斜杠是在解码为转义正斜杠时添加的。我看不到明显的错误,但有一种可能是该错误发生在${filename}
已展开。请尝试在表单中暂时用静态值替换此值,如testfile
,或上载名称中仅包含ascii字符的文件,就像测试一样。运气不好。@Michael sqlbot。
<form :action="aws_url" method="POST" enctype="multipart/form-data">
<input type="hidden" name="Content-Type" :value="s3Policy.content_type" />
<input type="hidden" name="acl" :value="s3Policy.acl" />
<input type="hidden" name="success_action_status" :value="s3Policy.success_action_status" />
<input type="hidden" name="policy" :value="s3Policy.policy" />
<input type="hidden" name="X-amz-credential" :value="s3Policy.credential" />
<input type="hidden" name="X-amz-algorithm" :value="s3Policy.algorithm" />
<input type="hidden" name="X-amz-date" :value="s3Policy.date" />
<input type="hidden" name="X-amz-signature" :value="s3Policy.signature" />
<input type="hidden" name="key" :value="s3Policy.key" />
<input type="file" name="file">
<input type="submit" value="Upload">
</form>