AWS добавляет метаданные к содержимому файла при использовании uploadUrl - PullRequest
0 голосов
/ 28 мая 2020

Я использую следующий код для получения инструкций по загрузке с помощью 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));
}

Я получаю URL-адрес через свой api и использую Postman для отправки запроса PUT. Но когда я использую этот URL для загрузки файла, я обнаружил, что AWS добавляет некоторые метаданные в начало моего файла, например «Content-type: Application octets stream ....». Это ошибка? Как избежать добавления дополнительной информации к загруженным файлам с URL-адресом загрузки?

ОБНОВЛЕНО: Например, я хочу загрузить простой текстовый файл со следующим текстом:

test

Когда я загружал на S3 через uploadUrl, после загрузки я получаю файл со следующим содержимым:

----------------------------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

Ответы [ 2 ]

0 голосов
/ 01 июня 2020

Я нашел информацию здесь . Обычно при загрузке файлов используются form-data:

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: '<uploadURL>',
            type: 'put',
            data: file,
            contentType: false,
            processData: false,
            success: function(response){
                if(response != 0){
                    alert('file uploaded');
                }else{
                    alert('file not uploaded');
                }
            },
        });
    });
});

В Postman необходимо использовать двоичные данные вместо форм-данных для прикрепления файла:

enter image description here

0 голосов
/ 28 мая 2020

Amazon всегда добавляет определенные метаданные к вашим объектам S3. Полный их список можно найти здесь . По данным Amazon There are two kinds of metadata: system metadata and user-defined metadata. Некоторые свойства метаданных, такие как тип содержимого, добавляются автоматически.

  • Метаданные, такие как дата создания объекта, контролируются системой, при этом только Amazon S3 может изменять значение.
  • Другое системные метаданные, такие как класс хранилища, настроенный для объекта, и то, включено ли для объекта шифрование на стороне сервера, являются примерами системных метаданных, значения которых вы контролируете. Если ваш сегмент настроен как веб-сайт, иногда вам может потребоваться перенаправить запрос страницы на другую страницу или внешний URL-адрес. В этом случае веб-страница - это объект в вашей корзине. Amazon S3 сохраняет значение перенаправления страницы в виде системных метаданных, значение которых вы контролируете.
...