【发布时间】:2012-08-26 13:44:07
【问题描述】:
我在使用 POST 执行直接上传到 S3 时遇到问题(使用 csrf)。
代码如下:
<form action="https://mymediaurl/" method="post" enctype="multipart/form-data">
<input type="hidden" name="key" value="uploads/${filename}">
<input type="hidden" name="AWSAccessKeyId" value="{{ access_key }}">
<input type="hidden" name="acl" value="private">
<input type="hidden" name="success_action_redirect" value="http://localhost/">
<input type="hidden" name="policy" value="{{ policy }}">
<input type="hidden" name="signature" value="{{ signature }}">
<input type="hidden" name="Content-Type" value="image/jpeg">
<!-- Include any additional input fields here -->
File to upload to S3:
<input name="file" type="file">
<br>
<input type="submit" value="Upload File to S3">
</form>
这是错误:
<Code>AccessDenied</Code>
<Message>
Invalid according to Policy: Extra input fields: csrfmiddlewaretoken
</Message>
包含 csfr 的源代码:
<form action="https://mymediaurl/" method="post" enctype="multipart/form-data">
<div style='display:none;'><input type='hidden' id='csrfmiddlewaretoken' name='csrfmiddlewaretoken' value='123412341234' /></div>
<div style='display:none;'><input type='hidden' id='csrfmiddlewaretoken' name='csrfmiddlewaretoken' value='123412341234' /></div>
<input type="hidden" name="key" value="uploads/${filename}">
<input type="hidden" name="AWSAccessKeyId" value="ASFDFDSF">
<input type="hidden" name="acl" value="private">
<input type="hidden" name="success_action_redirect" value="http://localhost/">
<input type="hidden" name="policy" value="asdhfkajewhlfawe">
<input type="hidden" name="signature" value="asdfasdfasdf">
<input type="hidden" name="Content-Type" value="image/jpeg">
<!-- Include any additional input fields here -->
File to upload to S3:
<input name="file" type="file">
<br>
<input type="submit" value="Upload File to S3">
</form>
我尝试将 csrfmiddlewaretoken 添加到我的策略文档中,但这不起作用。有没有人遇到过这个问题并找到了解决方案?我搜索了高低,但似乎找不到这个特定问题的答案。
如果重要的话,为这个项目运行 Django 1.3.1..
【问题讨论】:
-
为什么不使用 s3boto 存储或 django-storage 与 AWS 有很好的集成?这样,您可以在设置文件中设置 AWS 密钥等,而不必以每种形式处理它
-
@karthikr 感谢您的回复。我目前实际上正在使用 s3boto,但我想尝试跳过本地存储并将这些文件直接发送到 s3。这些文件都在 200+ MB 附近,我不想访问我的服务器。
-
确定您的保单格式正确吗?
csrfmiddlewaretoken?具体来说,我在想这里提到的$:forums.aws.amazon.com/message.jspa?messageID=188006 -
@Christopher 谢谢你的提示和链接。我在我的政策文件中添加了
["starts-with", "$csrfmiddlewaretoken", ""],- 上传成功了。 -
@Lonosea,我处于类似的位置,试图在此上传过程中传递自定义值。请问一下,执行成功操作重定向后,您是如何在服务器中收到 csrfmiddlewaretoken 的值的?
标签: django upload amazon-s3 amazon-web-services csrf