Java Spring批处理打开多部分文件,错误:';阅读器位于';严格的';模式';

Java Spring批处理打开多部分文件,错误:';阅读器位于';严格的';模式';,java,spring,spring-boot,spring-batch,Java,Spring,Spring Boot,Spring Batch,我从html前端上传了一个批处理文件 在我的控制器中,我正在尝试处理它 public @ResponseBody void customerBatchUpload(@RequestParam("batchFile") MultipartFile[] batchFile) throws Exception { File fileToImport = new File(batchFile[0].getOriginalFilename()); String pathToFile =

我从html前端上传了一个批处理文件

在我的控制器中,我正在尝试处理它

public @ResponseBody void customerBatchUpload(@RequestParam("batchFile") MultipartFile[] batchFile) throws Exception {

    File fileToImport = new File(batchFile[0].getOriginalFilename());

    String pathToFile = fileToImport.getAbsolutePath();
    FlatFileItemReader<Customer> reader = new FlatFileItemReader<>();
    reader.setResource(new FileSystemResource(pathToFile)); 
    reader.open(new ExecutionContext());
}
我尝试了我尝试了
String pathToFile=“file://”+fileToImport.getAbsolutePath()
String pathToFile=“file:\\”+fileToImport.getAbsolutePath()

两者都失败,并给出相同的上述错误。

Javadoc of:

返回客户端文件系统中的原始文件名

您的服务器无法访问客户端文件系统。怎么可能呢

您需要调用或来访问上载的文件内容

在您的情况下,使用可能是最好的选择:

try (InputStream in = batchFile[0].getInputStream()) {
    FlatFileItemReader<Customer> reader = new FlatFileItemReader<>();
    reader.setResource(new InputStreamResource(in));
    reader.open(new ExecutionContext());
    // more code here
}
try(InputStream in=batchFile[0].getInputStream()){
FlatFileItemReader=新的FlatFileItemReader();
reader.setResource(新的InputStreamResource(in));
reader.open(新的ExecutionContext());
//这里有更多代码
}
如果这不起作用,并且上载的文件大小有限,则可以使用
getBytes()

如果内存不足,或者需要处理大型文件,请使用
transferTo(file)
FileSystemResource
将上载的内容写入临时文件。记住在完成后删除临时文件。

getBytes()和ByteArrayResource工作正常。非常感谢
try (InputStream in = batchFile[0].getInputStream()) {
    FlatFileItemReader<Customer> reader = new FlatFileItemReader<>();
    reader.setResource(new InputStreamResource(in));
    reader.open(new ExecutionContext());
    // more code here
}