结果:
前端文件:
<template>
<div>
<input type="file" id="file" ref="file" v-on:change="handleFileUpload()"/>
<button @click="submitFile">上传</button>
</div>
</template>
<script>
import axios from 'axios';
export default {
data(){
return {
file: ''
}
},
methods: {
submitFile(){
let formData = new FormData();
formData.append('file', this.file);
axios.post( 'http://localhost:8080/upload/photos',
formData,
{
headers: {
'Content-Type': 'multipart/form-data'
}
}
).then(function(){
console.log('SUCCESS!!');
})
.catch(function(){
console.log('FAILURE!!');
});
},
handleFileUpload(){
this.file = this.$refs.file.files[0];
}
}
}
</script>
<style scoped>
.btn_pos{
margin-top: 0px;
}
</style>
后端代码:
@CrossOrigin @RestController @RequestMapping("/upload") public class ImageController {private final String UPLOAD_PATH = "D:/Download/";//写上你需要上传的本地路径(模拟服务器) @PostMapping("/photos") public ResponseEntity<String> uploadFile(@RequestParam MultipartFile file) { // ... File upload logic ... if (file.isEmpty()) { System.out.println("文件为空"); return new ResponseEntity<>("文件不能为空", HttpStatus.BAD_REQUEST); } try { byte[] bytes = file.getBytes(); Path path = Paths.get(UPLOAD_PATH + File.separator + file.getOriginalFilename()); System.out.println("path: " + path); Files.write(path, bytes); return new ResponseEntity<>("文件上传成功", HttpStatus.OK); } catch (IOException e) { e.printStackTrace(); return new ResponseEntity<>("文件上传失败", HttpStatus.INTERNAL_SERVER_ERROR); } }
另一种方式:HTTP请求
使用elementplus组件<el-upload>:
<template>
<div>
<el-upload
drag
action="http://localhost:8080/upload/photos"
:on-success="handleUploadSuccess"
:on-error="handleUploadError"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">拖拽文件到此处上传</div>
</el-upload>
</div>
</template>
<script>
export default {
methods: {
handleUploadSuccess(response, file) {
this.$message.success('文件上传成功');
},
handleUploadError(err, file) {
this.$message.error('文件上传失败');
}
}
};
</script>
后端代码与前面一样。