Skip to content

Converting MultipartFile to without copying to local machine

I have a Java Spring MVC web application. From client, through AngularJS, I am uploading a file and posting it to Controller as webservice.

In my Controller, I am gettinfg it as MultipartFile and I can copy it to local machine.

But I want to upload the file to Amazone S3 bucket. So I have to convert it to Right now what I am doing is, I am copying it to local machine and then uploading to S3 using jets3t.

Here is my way of converting in controller

MultipartHttpServletRequest mRequest=(MultipartHttpServletRequest)request;

Iterator<String> itr=mRequest.getFileNames();
            MultipartFile mFile=mRequest.getFile(;
            String fileName=mFile.getOriginalFilename();

            fileLoc="/home/mydocs/my-uploads/"+date+"_"+fileName; //date is String form of current date.

Then I am using FIleCopyUtils of SpringFramework

File newFile = new File(fileLoc);

                  // if the directory does not exist, create it
                  if (!newFile.getParentFile().exists()) {
                FileCopyUtils.copy(mFile.getBytes(), newFile);

So it will create a new file in the local machine. That file I am uplaoding in S3

S3Object fileObject = new S3Object(newFile);

s3Service.putObject("myBucket", fileObject);

It creates file in my local system. I don’t want to create.

Without creating a file in local system, how to convert a MultipartFIle to



MultipartFile, by default, is already saved on your server as a file when user uploaded it. From that point – you can do anything you want with this file. There is a method that moves that temp file to any destination you want.

But MultipartFile is just API, you can implement any other MultipartResolver

This API accepts input stream and you can do anything you want with it. Default implementation (usually commons-multipart) saves it to temp dir as a file.

But other problem stays here – if S3 API accepts a file as a parameter – you cannot do anything with this – you need a real file. If you want to avoid creating files at all – create you own S3 API.