我有一个Spring Boot应用程序,它是移动/ Web应用程序的API。其中一个端点接受这样的MultipartFile(图像或视频):
@RequestMapping(value = "/x/y/z", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<?> post(@RequestParam("file") MultipartFile file) {
...
}
当调用该方法时,我获取文件内容并将其保存在某处。但是我注意到了一个错误 - 如果我在上传过程中杀死移动应用上的网络连接,我就不会在API端获得任何类型的IOException
,我最终得到一个截断的字节数组:
try {
InputSteam inputStream = file.getInputStream();
byte[] allBytes = IOUtils.toByteArray(inputStream);
inputStream.close();
} catch (Exception ex) {
//never get to this
}
所以问题是:如何确保流不被中断?
使用Spring Boot:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>1.3.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
提前致谢。
答案 0 :(得分:1)
Multipart
流已经加载到服务器,然后才能在控制器内访问它。
使用checksum
确保文件不会中断。
计算并发送Multipart
数据:
@RequestMapping(...)
public ResponseEntity<?> post(@RequestParam("file") MultipartFile file,
@RequestParam("checksum") String checksum) {
...
}
之后,您可以重新计算服务器端的checksum
,以便检索要与请求验证范围内的收到的checksum
进行比较的实际// Run button (start the search)
final JButton btn = new JButton("Run");
btn.addActionListener(new ActionListener() {
@SuppressWarnings("resource")
public void actionPerformed(ActionEvent e) {
try {
String getTextArea;
getTextArea = textArea.getText();
// converting the input to an array
String[] arr = getTextArea.split("\\n");
// clearing the text
textArea_1.setText("");
//line = arr.length;
// looping for the input
// doing something.....
}
// end of for loop
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, "Search was not completed due to bad connection, please try pressing run again or close the tool and reopen it");
}
}
});
// Creating the progress bar
JProgressBar progressBar = new JProgressBar();
progressBar.setStringPainted(true);
progressBar.setValue(0);
for(int z = 0; z <= line; z++) {
progressBar.setValue(z);
z = z + 1;
progressBar.repaint();
}
progressBar.setBounds(364, 11, 139, 22);
contentPane.add(progressBar);
。