系列文章目录
前言
记录下,想形成写博客的习惯来锻炼自己,有不对的地方请各位在评论中给我指出来,请指点~;以下是pigx+vue+element-ui来实现的
一、大致思路(想法)
1、传入图片 2、后台获取图片名字 3、重新设置名称(防止重复名称) 4、存入地址 5、获取地址 6、存入数据库
二、使用步骤
1.引入库
代码如下(示例):
<el-upload style="display: flex;margin-left:5px;"
class="upload-picture"
:action="actionUrl"
:headers="headers"
accept=".jpg,.png"
multiple="false"
:show-file-list="false"
:before-upload="beforeAvatarUpload"
:http-request="getFile"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过2MB</div>
</el-upload>
2.js部分
代码如下(示例):
data(){
headers: {
Authorization: 获取的access_token
},
actionUrl:'要上传的路径',
PCOrAppRadio:'1',
}
methods: {
beforeAvatarUpload(file) {
console.log("图片大小",file.size)
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 2MB!');
}
return isLt2M;
},
getFile(item) {
console.log(item.file)
const fd = new FormData()
fd.append('filename', item.file)
fd.append('pictureFlag', this.PCOrAppRadio)
addPicture(fd).then(res => {
if (res.data.data){
this.$message.success("上传成功!")
}else {
this.$message.error("上传失败!")
}
})
},
}
3.后台
@RestController
@RequestMapping("/请求路径")
@AllArgsConstructor
@Api(value = "picture", tags = "图片上传")
public class PictureController {
private final PictureService pictureService;
@Inner(value = false)
@PostMapping("/pictureIndex")
public R uploadPicture(@RequestParam("filename") MultipartFile file ,@RequestParam("pictureFlag") String pictureFlag) throws IOException {
log.info("接收到的文件数据为:" + file +" pictureFlag =="+ pictureFlag);
if (file.isEmpty()) {
return R.ok("上传文件为空");
}
String fileName = file.getOriginalFilename();
String suffixName = fileName.substring(fileName.lastIndexOf("."));
String prefixName = fileName.substring(0, fileName.lastIndexOf("."));
String filePath = "图片存入服务器\本地盘服的存储路径";
int anInt = ThreadLocalRandom.current().nextInt();
fileName =prefixName + anInt + suffixName;
String absolutepath=filePath + fileName;
String readfilePath = "读取路径";
String readUrl = readfilePath + fileName;
File dest = new File(absolutepath);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
Picture picture = new Picture();
picture.setName(fileName);
picture.setFlag(pictureFlag);
picture.setCreateTime(LocalDateTime.now());
picture.setPath(readUrl);
if(pictureService.save(picture)){
try {
file.transferTo(dest);
return R.ok(true);
} catch (IOException e) {
e.printStackTrace();
}
}
service层,略,只声明下,没有任何逻辑
Mapper,略,添加相应的映射文件就行,
注:PigX,实体中声明属性最好是用驼峰,不要有“_”,不然框架解析出来的不一致,导致你某个属性会赋不上去。
总结
这个功能主要点 1、前端都传到后台什么数据,都有哪些,用到哪些 2、存入服务器的路径 3、怎么生成用于读取的路径,也就是需要存入数据库的数据 4、要是重复提交怎么处理 5、
|