java - Загрузить Multipart [] в Amazon S3 [дубликат]

Отличные ответы выше. Я хочу только добавить, что внутри области вашей функции вы можете присвоить значение этой переменной переменной let self = this;, а затем внутри обратного вызова просто обратиться к данным типа self.data.

Ваш код :

function MyConstructor(data, transport) {
    this.data = data;

    let self = this;   //ADD THIS LINE

    transport.on('data', function () {
        alert(self.data);   //USE IT LIKE THIS
    });
}

// Mock transport object
var transport = {
    on: function(event, callback) {
        setTimeout(callback, 1000);
    }
};

// called as
var obj = new MyConstructor('foo', transport);
9
задан Shiju K Babu 3 December 2015 в 11:27
поделиться

2 ответа

MultipartFile, по умолчанию, уже сохранен на вашем сервере в качестве файла при загрузке пользователя. С этого момента вы можете делать все, что хотите, с этим файлом. Существует метод, который перемещает этот временный файл в любой желаемый пункт назначения. http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/multipart/MultipartFile.html#transferTo (java.io.File)

Но MultipartFile - это просто API, вы можете реализовать любой другой файл MultipartResolver http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/multipart/MultipartResolver.html

Этот API принимает входной поток, и вы можете делать с ним все, что хотите. Реализация по умолчанию (обычно commons-multipart) сохраняет файл temp в качестве файла.

Но другая проблема остается здесь - если S3 API принимает файл как параметр - вы ничего не можете с этим сделать - вам нужно реальный файл. Если вы хотите вообще не создавать файлы - создайте свой собственный S3 API.

7
ответ дан Boris 21 August 2018 в 10:27
поделиться
  • 1
    Только проблема заключается в создании файла на локальной машине. То, что я делаю сейчас, после загрузки в amazon, я удаляю с моей локальной машины. – Shiju K Babu 13 January 2014 в 13:08
  • 2
    Что вдохновляет эту проблему? S3 java-API? Или что ? У вас есть возможность отправлять входной поток на S3? – Boris 13 January 2014 в 13:13
  • 3
    Это неверно в отношении S3 API, принимающего только параметр файла, он принимает также InputStream – Krzysztof Krasoń 18 November 2017 в 22:33

Вопрос уже не один год, поэтому я не уверен, что ссылка jets35 , предоставленная OP, имела следующий фрагмент в то время.

Если ваши данные не являются File или String, вы можете использовать любой входной поток в качестве источника данных, но вы должны вручную установить Content-Length.

// Create an object containing a greeting string as input stream data.
String greeting = "Hello World!";

S3Object helloWorldObject = new S3Object("HelloWorld2.txt");

ByteArrayInputStream greetingIS = new ByteArrayInputStream(greeting.getBytes());

helloWorldObject.setDataInputStream(greetingIS);
helloWorldObject.setContentLength(
    greeting.getBytes(Constants.DEFAULT_ENCODING).length);
helloWorldObject.setContentType("text/plain");

s3Service.putObject(testBucket, helloWorldObject);

Оказывается, вам не нужно сначала создавать локальный файл. Поскольку @Boris предлагает вам подать S3Object с помощью Data Input Stream, Content Type и Content Length, вы получите от MultipartFile.getInputStream() , MultipartFile.getContentType() и MultipartFile.getSize() соответственно.

5
ответ дан Kostas Filios 21 August 2018 в 10:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: