【发布时间】:2014-06-26 19:03:53
【问题描述】:
好的,在这个 phonegap 应用中,我从设备相机中的一个巨大的图像文件开始。
然后我降低分辨率并允许用户使用javascript画布和一些非常酷的代码darkroomJS来裁剪它。
最后,darkroomJS 使用 toDataURL() 方法从画布中获取 base64 数据。
现在我需要将它上传到 Amazon S3。
我可以使用表单将文件从我的计算机上传到 S3。我正在处理的是发送 base64 数据。
我还有一个将 base64 数据转换为 blob 的函数。 (我已经阅读过,但我对其他想法持开放态度)。
<form action="https://mybucketname.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
<input type="" id="key" name="key" value="uploads/${filename}">
<input type="" id="AWSAccessKeyId" name="AWSAccessKeyId" value="YOUR_AWS_ACCESS_KEY">
<input type="" id="acl" name="acl" value="private">
<!-- <input type="" id="success_action_redirect" name="success_action_redirect" value="http://localhost/"> -->
<input type="" id="policy" name="policy" value="YOUR_POLICY_DOCUMENT_BASE64_ENCODED">
<input type="" id="signature" name="signature" value="YOUR_CALCULATED_SIGNATURE">
<input type="" id="Content-Type" name="Content-Type" value="image/jpeg">
<!-- <input id="file" name="file" > -->
<br>
<input type="submit" value="Upload File to S3">
</form>
在从我的服务器获取凭据后,我使用 jquery 写入凭据。这部分工作正常。
问题是如何在表单中放置一个 blob?
我尝试了两种方法。 使用 jQuery 设置值。
$page.find("#file").attr('value', blobData); //将字符串[object Blob]文本插入到字段中并发送到S3,不是很有用
我也试过了:
var fd = new FormData(document.forms[0]);
fd.append('file', blobData);
//没有效果;然后 S3 抱怨它需要一个文件,但没有得到。
我做错了什么?我怎样才能做到这一点?
【问题讨论】:
标签: javascript forms upload amazon-s3 blob