开始
点击头像选择 图片上传
前端
上传事件
uploadFace(e) {
// let $target = e.target || e.srcElement;
// let file = $target.files[0];
let f = document.getElementById('userFace').files[0];
// console.log(f);
let multiForm = new FormData() ; //创建一个form对象
multiForm.append('file', f, f.name); //append 向form表单添加数据
var userInfo = this.userInfo;
// console.log(userInfo);
// 请求后端获得最新数据
var serverUrl = app.serverUrl;
axios.defaults.withCredentials = true;
axios.post(
serverUrl + '/userInfo/uploadFace?userId=' + userInfo.id,
multiForm,
{
headers: {
'Content-Type': 'multipart/form-data',
'headerUserId': userInfo.id,
'headerUserToken': userInfo.userUniqueToken
}
})
.then(res => {
if (res.data.status == 200) {
// var userInfoMore = res.data.data;
// console.log(userInfoMore);
alert("头像上传成功!");
window.location.reload();
} else {
alert(res.data.msg);
console.log(res.data.msg);
}
});
},
前端js用的异步的方式去上传。首先去获取文件
创建一个form对象,里面放了一个file。f就是文件的内容,
headers里面设置上传的内容的类型。涉及到文件上传就必须设置multipart
就像,我们以前在写jsp的时候,form表单必须要设置enctype里面必须是multipart,如果form里面有文件上传的话,后端才能获取到。
后端代码
文件的上传
这样这个文件就以参数的形式接收了
继承baseController
我在windows下要存的路径是:
D:\demos\upload
// 在windows上我们要存的路径是:D:\\demos\\upload 那么就把斜线都换成了File.separator为了兼容不同的操作系统
public static final String IMAGE_USER_FACE_LOCATION= "D:"+File.separator+"demos"+File.separator+"upload";
本机电脑保存的路径
路径第一个/在windows和mac电脑下是不一样的
兼容两个系统
使用File.separator来替代第一个斜线
每一个斜线 都用File.separator来替代
可以看下separator的源码
fs是一个FileSystem
当前的默认操作系统。
在unix和macOS下是一个斜杠
在windows下就是两个反斜线
// 定义头像保存的地址
String fileSpace=IMAGE_USER_FACE_LOCATION;
//在路径上位每一个用户增加一个userId 用于区分不同用户上传
String uploadPathPrefix = File.separator+userId;
// 开始上传
if(file!=null){
} else {
return IMOOCJSONResult.errorMsg("文件不能为空!");
}