上传文件并直接将其流式传输到磁盘,而不会将其存储在内存中

问题描述:

我有一个控制器,它允许我通过PUT上传文件。文件内容(byte [])首先存储在内存中,然后写入磁盘。上传文件并直接将其流式传输到磁盘,而不会将其存储在内存中

有没有办法直接将文件流式传输到磁盘而不将其存储在内存中?

的代码是在这里:

package dummy; 

import java.io.File; 
import java.io.IOException; 

import org.apache.commons.io.FileUtils; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.http.HttpEntity; 
import org.springframework.http.HttpStatus; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.ResponseStatus; 
import org.springframework.web.bind.annotation.RestController; 

@RestController 
@EnableAutoConfiguration 
public class WebController { 

    @RequestMapping(value = "/upload", method = RequestMethod.PUT) 
    @ResponseStatus(HttpStatus.NO_CONTENT) 
    public void addCardproviderLogo(final HttpEntity<byte[]> requestEntity) throws IOException { 

      final byte[] payload = requestEntity.getBody(); 

      FileUtils.writeByteArrayToFile(new File("/tmp/myfile-" + System.currentTimeMillis() + ".tmp"), payload); 
    } 

} 
+0

上坚持的CommonsMultipartFile您使用Java 7+,不要”你呢?如果是,为什么使用'File'而不是java.nio.file?其次,你不能从你的放入请求中获得一个'InputSream'吗? – fge

你可以使用MultipartHttpServletRequest,比你可以提取包含的InputStream数据库

public Map uploadFile(MultipartHttpServletRequest defaultMultipartHttpServletRequest, 
           @PathVariable(CommonConstants.PUBLIC_PROCUREMENT_ID) Integer id, 
           @PathVariable(CommonConstants.PARCEL_ID) Integer parcelId) { 
    LOGGER.debug("upload item file for public procurement {}", id); 
    CommonsMultipartFile file = (CommonsMultipartFile) (defaultMultipartHttpServletRequest.getFile(FILE_DATA) == null ? 
      defaultMultipartHttpServletRequest.getFile(FILE_DATA_EXPLORER) : defaultMultipartHttpServletRequest.getFile(FILE_DATA)); 

}