我正在使用下面的代码使用预签名的URL将图像文件上传到Amazon S3。它确实上传了文件,但是其内容已损坏(并且and肿)。我已经(a)验证了<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="background">
<footer id="footer">
<div id="footer-nav">
<ul>
<li id="info">INFO
<ul>
<li id="twitter"><a href="https://twitter.com" target="_blank">TWITTER</a></li>
<li id="instagram"><a href="https://www.instagram.com" target="_blank">INSTAGRAM</a></li>
<li id="email"><a href="mailto:email@email.com">EMAIL</a></li>
</ul>
</li>
</ul>
</div>
</footer>
</div>
有122576字节,与原始reader.result
文件相同(b)验证了.jpg
。上传的文件> 177kb。
作为检查,我使用Postman使用info.fileValue.type = 'image/jpeg'
给定的预签名URL上载相同的文件,并将info.url
标头设置为Content-Type
。上载成功:文件未损坏且长度正确。奇怪的是,我正在向image/jpeg
输入相同的URL,相同的二进制数据,并指定相同的内容类型,但得到的结果却不同。我很困惑!
$.ajax
注意在以后添加:
我也尝试使用Fetch发出PUT请求,如下面的代码所示。 结果是相同的:文件已上传到指定的S3存储桶/路径,但文件内容已损坏(并且and肿)。原始文件大小为132,454字节,上传的文件大小为> 192KB。数据正以某种方式更改。
这是$.ajax({
url: info.url, // the presigned URL
headers: {
'Access-Control-Allow-Origin': '*'
},
contentType: info.fileValue.type,
processData: false,
type: 'PUT',
data: reader.result,
success: function() { console.log('Uploaded data successfully.'); }
});
代码:
Fetch
我缺少一个设置吗?
PS。我再次验证,使用相同的文件和相同的预签名URL,当我直接与Postman进行上传时,上传的文件没有损坏。