[使用uploadUrl时AWS将元数据添加到文件内容中

问题描述 投票:0回答:2

我正在使用下一个代码来通过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在文件的开头添加了一些元数据,例如“内容类型:应用程序八位字节流...”。是虫子吗?如何避免使用上载URL向上载的文件添加额外的信息?

更新:例如,我要上传带有下一个文本的简单txt文件:

test

[当我通过uploadUrl上传到S3时,下载后,我得到了具有下一个内容的文件:

----------------------------174475527638909501568708
Content-Disposition: form-data; name=""; filename="test.txt"
Content-Type: text/plain

test
----------------------------174475527638909501568708--

[此外,我在生成uploadUrl时更改了文件名。另外,当我上传zip存档时,从s3存储桶下载后无法解压。但是,当我通过AWS CLI上传文件时,所有方法都可以使用。

PUT请求中的地址为uploadUrl。接下来是邮递员添加的标题:

enter image description here

java amazon-web-services amazon-s3 postman aws-java-sdk
2个回答
0
投票

Amazon始终向您的S3对象添加某些元数据。可以找到它们的完整列表here。根据亚马逊There are two kinds of metadata: system metadata and user-defined metadata。某些元数据属性(例如内容类型)会自动添加。

  • 对象创建日期之类的元数据是系统控制的,只有Amazon S3可以修改该值。
  • 其他系统元数据,例如为该对象配置的存储类,以及该对象是否已启用服务器端加密,是可以控制其值的系统元数据的示例。如果您将存储桶配置为网站,则有时您可能希望将页面请求重定向到另一个页面或外部URL。在这种情况下,网页就是您存储桶中的对象。 Amazon S3将页面重定向值存储为您控制其值的系统元数据。

0
投票

我找到了一些信息here。通常在上传使用表单数据的文件时:

var fd = new FormData();
var file = document.getElementById('file')[0];
fd.append('file',file);

必须使用下一个:

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:

$(document).ready(function(){

    $("#but_upload").click(function(){

        var upload = document.getElementById('file');
var file = upload.files[0];

        $.ajax({
            url: 'insert upload pre-signed url',
            type: 'put',
            data: file,
            contentType: false,
            processData: false,
            success: function(response){
                if(response != 0){
                    alert('file uploaded');
                }else{
                    alert('file not uploaded');
                }
            },
        });
    });
});

似乎在邮递员中不可能做同样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.