我在reactjs前端有一个file类型的输入域。我想上传一个CSV文件,并将其发送到使用SpringBoot的服务器。我有问题,如何获得该文件,一旦它是提取到我的后端。
这是我在render方法中输入的文件:
<input
accept=".csv"
type="file"
onChange={this.handleChange}
/>
<Button primary onClick={this.handleSubmit}> Submit </Button>
HandleSubmit:
handleSubmit(event) {
event.preventDefault();
let formData = new FormData();
formData.append('file', this.state.csv);
fetch('http://localhost:8080/ingest', {
method: 'POST',
body: formData
})
.then((res) => {
var promiseStatus = res.text();
promiseStatus.then(function (value) {
console.log(value);
});
})
}
我的后端控制器是
@PostMapping(INGEST_URL)
public String ingestDataFile(@RequestBody ??? response) {
return "temporary return";
}
比如说,为了打印文件的内容,ingestDataFile()
应该接受什么作为requestBody。
发布于 2018-08-09 07:38:36
您的端点应该看起来很像这样
@PostMapping(INGEST_URL)
public String ingestDataFile(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
if (file.isEmpty()) {
redirectAttributes.addFlashAttribute("message", "No File is Present");
return "redirect:uploadStatus";
}
try {
// Get the file and save it somewhere
byte[] bytes = file.getBytes();
Path path = Paths.get("FOLDER TO UPLOAD TO" + file.getOriginalFilename());
Files.write(path, bytes);
redirectAttributes.addFlashAttribute("message",
"File upload successful'" + file.getOriginalFilename() + "'");
} catch (IOException e) {
e.printStackTrace();
}
return "redirect:/uploadStatus";
}
@GetMapping("/uploadStatus")
public String uploadStatus() {
return "uploadStatus";
}
发布于 2018-08-09 07:52:32
参数应为:
@PostMapping(INGEST_URL)
public String ingestDataFile(@RequestParam("file") MultipartFile file) {
System.out.println("Name is::: " + file.getName());
// Get file in byte[] using file.getBytes()
storeCSVInDbServer(file);
return "temporary return";
}
如果要将文件存储在数据库服务器中,可以将其存储在数据库的BLOB列中。
https://stackoverflow.com/questions/51756899
复制相似问题