Отличные ответы выше. Я хочу только добавить, что внутри области вашей функции вы можете присвоить значение этой переменной переменной 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);
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.
Вопрос уже не один год, поэтому я не уверен, что ссылка jets35 , предоставленная OP, имела следующий фрагмент в то время.
Если ваши данные не являются
File
илиString
, вы можете использовать любой входной поток в качестве источника данных, но вы должны вручную установить Content-Length.blockquote>// 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()
соответственно.