我有一个控制器
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)
答案 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();
}
}
}
您可以通过这种方式实现文件上传