Vue+Element+Springboot实现图片上传

Posted java李杨勇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue+Element+Springboot实现图片上传相关的知识,希望对你有一定的参考价值。

最近没事刚好练习下vue+springboot前段后分离的项目、用上了图片上传功能、记录一下。

前端待提交的表单部分代码

<el-form-item label="封面图片">
                <el-upload v-model="dataForm.title"
                        class="avatar-uploader"
                        :limit="1"
                        list-type="picture-card"
                        :on-preview="handlePictureCardPreview"
                        multiple
                        :http-request="uploadFile"
                        :on-remove="handleRemove"
                        :on-change='changeUpload'
                        :file-list="images">
                    <i class="el-icon-plus"></i>
                </el-upload>
            </el-form-item>
复制代码

el-upload里面的元素解释:

on-preview:点击文件列表中已上传的文件时的事件

on-remove:删除文件时候调用的方法

on-change:文件状态改变时的事件,添加文件、上传成功和上传失败时都会被调用

file-list:上传的文件列表或者默认回显的数据展示渲染

retrun和data

return 
                images: [name: 'food.jpg', url: 'https://img-blog.csdnimg.cn/20210329194832973.png'],
                imageUrl: '',
                fileList: [],  // 文件上传数据(多文件合一)
                dialogImageUrl: '',
                dialogVisible: false,
                options: [],
                content: '',
                editorOption: ,
                visible: false,
                dataForm: 
                    id: 0,
                    title: '',
                    content: '',
                    bz: ''
                ,
                tempKey: -666666 // 临时key, 用于解决tree半选中状态项不能传给后台接口问题. # 待优化
            
复制代码

预览图片和上传图片以及删除图片

changeUpload: function(file, fileList) //预览图片
                this.fileList = fileList;
            ,
            uploadFile(file)

            ,
            handleRemove(file, fileList) 
            ,
            handlePictureCardPreview(file) 
                this.dialogImageUrl = file.url;
                this.dialogVisible = true;
            ,       
复制代码

这里我是用fomrData对象进行提交的、因为只需要上传一张单张封面图片、还有添加其他的一些表单内容进去

// 表单提交
            dataFormSubmit () 
                const form = new FormData()// FormData 对象
                form.append('file', this.fileList);
                form.append('title', this.dataForm.title);
                form.append('content', this.$refs.text.value);
                this.$refs['dataForm'].validate((valid) => 
                    if (valid) 
                        this.$http(
                            url: this.$http.adornUrl(`/sys/inform/$!this.dataForm.id ? 'save' : 'update'`),
                            method: 'post',
                            data: form
                        ).then((data) => 
                            if (data && data.code === 0) 
                                this.$message(
                                    message: '操作成功',
                                    type: 'success',
                                    duration: 1500,
                                    onClose: () => 
                                        this.visible = false
                                        this.$emit('refreshDataList')
                                    
                                )
                             else 
                                this.$message.error(data.msg)
                            
                        )
                    
                )
            
复制代码

后台的话通过HttpServletRequest request--WebUtils .getNativeRequest(request, MultipartHttpServletRequest.class)来获取文件请求并解析文件到服务器或本地

/**
 * @author lyy
 * 保存  PC-后台上传文件
 */
@RequestMapping(value = "sys/file/save", method = RequestMethod.POST, RequestMethod.GET)
@Transactional
public R save(HttpServletRequest request) 
    String classify = request.getParameter("classify");
    MultipartHttpServletRequest multipartRequest = WebUtils
            .getNativeRequest(request, MultipartHttpServletRequest.class);
    String fileName = "";
    if (multipartRequest != null) 
        Iterator<String> names = multipartRequest.getFileNames();
        while (names.hasNext()) 
            List<MultipartFile> files = multipartRequest.getFiles(names.next());
            if (files != null && files.size() > 0) 
                for (MultipartFile file : files) 
                    fileName = file.getOriginalFilename();
                    String SUFFIX = FileUtil.getFileExt(fileName);
                    File uFile = new File();
                    uFile.setFileName(fileName);
                    uFile.setClassify(classify);
                    uFile.setCreateTime(new Date());
                    uFile.setFileType(SUFFIX);
                    String uuid = FileUtil.uuid();
                    try 
                        uFile.setPath(uploadFile(uuid,file) +uuid+"."+SUFFIX);
                     catch (IOException e) 
                        e.printStackTrace();
                    
                     fileService.save(uFile);
                
            
        
    
    return R.ok();

复制代码

上传文件到本地的静态方法

 /**
     * 上传文件
     *@author lyy
     * @param file
     * @return
     * @throws IOException
     * @throws IllegalStateException
     */
    public static String uploadFile(String uuid, MultipartFile file) throws IllegalStateException, IOException 
        String defaultUrl = MyFileConfig.getFilePath();
        String Directory = java.io.File.separator ;
        String realUrl = defaultUrl + Directory;
        java.io.File realFile = new  java.io.File(realUrl);
        if (!realFile.exists() && !realFile.isDirectory()) 
            realFile.mkdirs();
        
        String fullFile = realUrl + uuid + "."+FileUtil.getFileExt(file.getOriginalFilename());
        file.transferTo(new java.io. File(fullFile));
        String relativePlanUrl = Directory;
        return relativePlanUrl.replaceAll("\\\\", "/");
    

精彩源码推荐:

 大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻

打卡 文章 更新 108/  365天

 精彩专栏推荐:下方专栏👇🏻👇🏻👇🏻👇🏻

java项目精品实战案例《100套》https://blog.csdn.net/weixin_39709134/category_11128297.htmlhttps://blog.csdn.net/weixin_39709134/category_11128297.htmlweb前端期末大作业网页实战《100套》https://blog.csdn.net/weixin_39709134/category_11374891.htmlhttps://blog.csdn.net/weixin_39709134/category_11374891.html 

以上是关于Vue+Element+Springboot实现图片上传的主要内容,如果未能解决你的问题,请参考以下文章

element+springboot实现简单的商品管理

基于Java+SpringBoot+vue+element实现前后端分离玩具商城系统

基于Java+SpringBoot+vue+element实现校园疫情防控系统详细设计和实现

SpringBoot+SpringCloud+vue+Element开发项目——业务功能实现

基于Java+SpringBoot+vue+element实现前后端分离房屋租赁系统详细设计

基于Java+SpringBoot+vue+element实现火车订票平台管理系统