springboot InputStream

时间:2016-04-21 05:49:01

标签: spring-boot multipartform-data

我有一个控制器

void upload(@RequestParam(value="file", MultiPartFile file, @RequestParam(value = "content", required = false) InputStream stream){}

当用户通过Stream上传文件时,我从未得到过InputStream的句柄。

我如何配置?

正常的文件上传工作正常。 我正在发送Bzip2内容以在springboot中启用上传和多部分默认设置。

我确实收到了这个错误。

  

引起:java.lang.IllegalArgumentException:无法检索   类路径资源的InputStream [BZh91AY&SY90WT A %L   !! 9DܑN $ L]:

     

在   org.springframework.beans.propertyeditors.InputStreamEditor.setAsText(InputStreamEditor.java:77)   在   org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:449)   在   org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:422)   在   org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:195)   在   org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:107)   在   org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:64)

1 个答案:

答案 0 :(得分:0)

控制器

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.flasher.service.ImageService;

@RestController
public class ImageControllerRest {
    @Autowired
    ImageService imageService;

    @PostMapping("/upload_img")
    public ResponseEntity<?> uploadImage(@RequestParam("file") MultipartFile file, Authentication authentication) {
        try {
            imageService.store(file, authentication.getName());
            return new ResponseEntity<>(HttpStatus.OK);
        } catch (Exception e) {
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }

    }

}

服务

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.flasher.util.UUIDGenerator;

@Service
public class ImageService {
    @Value("${flasher.absolute.img.path}")
    String imageUploadPath;
    @Autowired
    UUIDGenerator uuidGenerator;

    public void store(MultipartFile file, String username) {
        try {
            File uploadFolder = new File(imageUploadPath+username);
            if (!uploadFolder.exists()) {
                uploadFolder.mkdirs();
            }           
            Files.copy(file.getInputStream(),
                    Paths.get(uploadFolder.getAbsolutePath()).resolve(uuidGenerator.generateUUID()+"."+file.getContentType().split("/")[1]));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

您可以通过这种方式实现文件上传