原来有做过图片的上传,也不是很难,而且在访问图片时候也没有发现问题,但是在刚刚要完成的一个小项目里面却屡屡爆出问题,困扰了整整一天,终于解决。但是也不知道是怎么解决的,只是把代码搬出来,防止以后犯错。
实现思路:
在图片的上传其实是分为两步:
(1)先将图片上传到指定的文件夹下边,并且返回一个图片的名称。
(2)将整个表单,包括图片的名称一起保存到数据库中去。
第一步实现
前端vue的表单代码
文章图片
文章图片
Controller类的书写
@Controller
@RequestMapping(value = "https://www.it610.com/imgs",produces = { "text/html;
charset=UTF-8;
", "application/json;
charset=UTF-8;
" })
public class ImgUploadController {@RequestMapping("/imgUpload")
@ResponseBody
public String imgUpload(@RequestParam("picture") MultipartFile picture, HttpServletRequest request){//获取文件在服务器的储存位置
String path = request.getSession().getServletContext().getRealPath("/upload");
File filePath = new File(path);
System.out.println("文件的保存路径:"+filePath);
if(!filePath.exists() && !filePath.isDirectory()){
System.out.println("目录不存在");
filePath.mkdir();
}//获取原始文件名称(包含格式)
String originalFilename = picture.getOriginalFilename();
System.out.println("原始文件的名称是:"+originalFilename);
//获取文件类型,以最后一个`.`为标识
String type = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
System.out.println("文件类型:"+type);
//获取文件名称(不包含格式)
String name = originalFilename.substring(0, originalFilename.lastIndexOf("."));
//设置文件新名称: 当前时间+文件名称(不包含格式)
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String date = sdf.format(d);
String fileName = date + "." + type;
System.out.println("新文件名称:" + fileName);
//在指定路径下创建一个文件
File targetFile = new File(path, fileName);
//将文件保存到服务器指定位置try {
picture.transferTo(targetFile);
System.out.println("上传成功");
//将文件在服务器的存储路径返回
ReturnMsg returnMsg = new ReturnMsg("200",fileName);
return JSON.toJSONString(returnMsg);
} catch (IOException e) {
System.out.println("上传失败");
e.printStackTrace();
ReturnMsg returnMsg = new ReturnMsg("400","上传失败");
return JSON.toJSONString(returnMsg);
}}}
第二步实现
vue的html代码:
文章图片
文章图片
handleChange(checked,index)">{{item.class_name}}
立即创建
重置
vue的js代码:
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
console.log("名称"+this.ruleForm.name);
console.log("描述"+this.ruleForm.desc);
console.log("隐私级别:"+ this.result_data.secrecy_level);
console.log("谜语类型:"+ this.result_data.con_type);
this.result_data.con_name = this.ruleForm.name;
this.result_data.con_desc = this.ruleForm.desc;
this.result_data.user_id = JSON.parse(localStorage.getItem("user")).id;
this.result_data.con_type = this.result_data.con_type;
this.result_data.secrecy_level = this.ruleForm.delivery;
this.result_data.img_path = this.ruleForm.img_path;
console.log(this.result_data)var api = this.GLOBAL.host+"saywords/saveSaywords";
this.$axios.post(api,this.result_data).then((response)=>{
// console.log(response.data)
if(response.data.code == '200'){
this.$alert("发布成功","提示",{
confirmButtonText:'确定',
callback:action=>{
this.$refs[formName].resetFields();
this.getSaywords();
this.result_data.con_type = [];
}
})
}
},(error)=>{
console.log(error)
});
} else {
console.log('error submit!!');
return false;
}
});
},
Controller代码:
@RequestMapping("/saveSaywords")
@ResponseBody
public String save(@RequestBody String usaywords){
Saywords saywords = JSON.parseObject(usaywords,Saywords.class);
saywordsService.save(saywords);
ReturnMsg returnMsg = new ReturnMsg("200","成功");
return JSON.toJSONString(returnMsg);
}
【Vue|ssm和vue实现图片的上传和回显,以及图片的访问】
推荐阅读
- vue|vue5 if与show
- vue搜索过滤
- vue|vue3 class样式
- vue|vue导航栏自定义设置带图片(选中状态刷新不消失)
- vue性能优化|vue功能之“loading加载优化“
- Vue|Vuex实现todolist
- vue|实现文本内容是超链接时自动转换为超链接
- vue.js|学生信息管理 vue+Element UI+springboot 前后端分离
- Vue(+ element UI + Django)编写学生管理页面