我正在使用下面的代码来获取uploadUrl的上传指令。
public UploadInstruction getUploadUrl() {
final var objectKey = getObjectKey(generateUniqueFileKey());
final var url = amazonS3.generatePresignedUrl(s3Properties.getBucket(), objectKey,
calculateExpirationDate(s3Properties.getDownload().getUrlExpiration()), HttpMethod.PUT);
return new UploadInstruction(url, getFileKey(objectKey));
}
我通过我的api获取URL,然后用Postman发送PUT请求。但是当我使用这个URL上传文件时,我发现AWS在我的文件开头添加了一些元数据,比如 "Content-type: Application octets stream..."。这是一个bug吗?如何避免给上传的文件添加额外的信息与是上传URL?
UPDATED:例如,我想上传简单的txt文件与下一个文本。
test
当我通过uploadUrl上传至S3时,下载后我得到了一个带有下一个内容的文件。
----------------------------174475527638909501568708
Content-Disposition: form-data; name=""; filename="test.txt"
Content-Type: text/plain
test
----------------------------174475527638909501568708--
另外,我在生成uploadUrl的时候更改了文件名。另外,我上传zip压缩包时,从s3 bucket下载后无法解压。但我通过AWS CLI上传文件时,一切正常。
PUT请求中的地址是uploadUrl。接下来是我的头文件,是邮递员添加的。
亚马逊总是将某些元数据添加到您的S3对象中。它们的完整列表可以被发现 此处. 根据亚马逊 There are two kinds of metadata: system metadata and user-defined metadata
. 某些元数据属性,如内容类型会自动添加。
- 元数据(如对象创建日期)是系统控制的,只有Amazon S3可以修改该值。
- 其他系统元数据,如为对象配置的存储类以及对象是否启用了服务器端加密,都是系统元数据的例子,其值由您控制。如果您的 bucket 被配置为网站,有时您可能希望将页面请求重定向到另一个页面或外部 URL。在这种情况下,网页是您的 bucket 中的一个对象。Amazon S3 将页面重定向值存储为系统元数据,其值由您控制。
我发现了一些信息 此处.通常在上传文件时使用form-data。
var fd = new FormData();
var file = document.getElementById('file')[0];
fd.append('file',file);
有必要使用next。
var upload = document.getElementById('file');
var file = upload.files[0];
完整的代码。
<form method="put" action="" enctype="multipart/form-data" id="myform">
<div >
<input type="file" id="file" name="file" />
<input type="button" class="button" value="Upload" id="but_upload">
</div>
</form>
Ajax.在Postman中,有必要使用二进制而不是form-data来附加一个文件:
$(document).ready(function(){
$("#but_upload").click(function(){
var upload = document.getElementById('file');
var file = upload.files[0];
$.ajax({
url: '<uploadURL>',
type: 'put',
data: file,
contentType: false,
processData: false,
success: function(response){
if(response != 0){
alert('file uploaded');
}else{
alert('file not uploaded');
}
},
});
});
});
在Postman中,需要使用二进制而不是form-data来附加文件。