element-ui中的文件上传回显和删除

一、后端代码的展示

      1.核心代码解析

    (1)用来接受文件的接口MultipartFile是一个封装了输入流和输出流的强大API,里面的一个方法transfeTo(一个文件对象)可以把我们上传的文件存储到指定的文件目录,一般页面需要后端返回一个包括文件名(fileName)、文件虚拟地址(virtualpath)、文件网络访问地址(urlPath)的一个ImageVO类(其中的虚拟地址一般保存在数据中的image属性中),所以我们需要创建一个这样的类,处理业务的时候需封装返回值。

package com.ns.controller;

import com.ns.service.FileService;
import com.ns.vo.ImageVO;
import com.ns.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;

@RestController
@CrossOrigin
@RequestMapping("/file")
public class FileController {
    @Autowired
    private FileService fileService;
    @PostMapping("/upload")
    public SysResult uploadFile(MultipartFile file) throws IOException {
        //MultipartFile 是一个整合了输入流和输出流的接口
      /*  System.out.println(file);
       //获取文件的名称
        String filename = file.getOriginalFilename();
        *//*创建目录 在D盘下的images2目录下*//*
        String fileDir="D:/images2/";
        File dir = new File(fileDir);
        if(!dir.exists()){
            dir.mkdirs();
        }
        //文件的全路径
        String filePath=fileDir+filename;
        //把文件保存在指定的目录下 transferTo方法
        file.transferTo(new File(filePath));
        System.out.println("文件上传成功");
        return SysResult.success();*/
        ImageVO imageVO=fileService.loadFile(file);
        if (imageVO==null)
            return SysResult.fail();
        return SysResult.success(imageVO);
    }
   @DeleteMapping("/deleteFile")
    public SysResult deleteFile(String virtualPath){
        fileService.deleteImage(virtualPath);
        return SysResult.success();
   }
}

 (2)对于前端传过来的文件,有一些我们并不需要,此时我们需要进行限制,当然了,你想任何文件都可以上传,当然是可以的了。但是一般业务处理对一些文件是有一定的限制的,例如我们上传文件,我们首先需要判断是否是图片、是否是恶意程序攻击,以下代码是处理图片需要注意的一些限制,另外文件的存储我们需要进行思考,怎样存储呢?才能使得我们管理和存储文件得到一定的方便,存储文件的方法有很多 例如 按时间存储、大小、文件类型等等,我采用的是按时间的方法来进行存储,还有存储文件的文件名,我们需要进行更改,不能够同名,采用的策略是UUID。

(3)删除比较简单,通过前端传过来的虚拟地址,在加上我们的本地磁盘目录,就可以找到文件所在的目录进行删除操作。

(4)一些文件的回显。回显的操作用到了Nginx的代理,需要我们在nginx.conf配置文件中配置我们服务名和磁盘地址(Linux中是目录)两者的代理。另外没有购买域名的情况下,我们需要修改系统中的hosts文件,把请求发送到我们本地,交给Nginx代理。

package com.ns.service;

import com.ns.vo.ImageVO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@Service
@PropertySource(value = "classpath:/images.properties")
public class FileServiceImp implements FileService {
    @Value("${localDir}")
    private String localDir;
    @Value("${prePath}")
    private  String prePath;
    public ImageVO loadFile(MultipartFile file) {
        String fileName=file.getOriginalFilename();
        //1.判断文件是否是图片
        fileName= fileName.toLowerCase();
        boolean matches = fileName.matches("^.+\\.(png|jpg|gif)$");
        if (!matches)
            return null;
        //2.判断是否是恶意程序 通过文件的长度和高度
        BufferedImage read = null;
        try {
            read = ImageIO.read(file.getInputStream());
            int height = read.getHeight();
            int width = read.getWidth();
            if (height==0||width==0)
                return null;
            //3.实现分目录存储
            String dataDir = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());
            String dataPath=localDir+dataDir;
            System.out.println(":"+dataPath);
            File dirFile = new File(dataPath);
            if(!dirFile.exists())
                dirFile.mkdirs();
           //4.解决文件名冲突的问题
            String uuid = UUID.randomUUID().toString().replace("-", "");
            System.out.println("随机生成的一段字符串:"+UUID.randomUUID().toString());
            //截取图片的后缀名
            int index = fileName.lastIndexOf(".");
            String hz = fileName.substring(index);
            String newFileName=uuid+hz;
            String realPath=dataPath+newFileName;
            file.transferTo(new File(realPath));
            //封装返回值
            //1.虚拟地址
            String virtualpath=dataDir+newFileName;
            //2.文件的访问地址
            String url=prePath+virtualpath;
            ImageVO imageVO = new ImageVO(virtualpath, url, newFileName);
            System.out.println("文件的本地路径:"+realPath);
            System.out.println("文件的网络访问地址是:"+url);
            return imageVO;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

    }

    public void deleteImage(String virtualPath) {
           String path=localDir+virtualPath;
           File file = new File(path);
           if(file.exists())
               file.delete();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现element-ui上传图片回功能,可以使用el-upload组件。在代码,通过设置:file-list属性来传递图片数据进行回。具体实现步骤如下: 首先,在el-upload组件设置:file-list属性为img,这里的img是一个数据对象,用于存储上传的图片数据。 接着,在handleChanges方法,获取到上传的图片之后,将图片数据进行格式转换,然后更新img对象的数据。 最后,在模板使用v-for指令遍历img对象的数据,将每个图片进行渲染展示。 综上所述,通过这样的步骤,就可以实现element-ui上传图片的回效果了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [element-ui 上传图片回](https://blog.csdn.net/qq_21861771/article/details/130418857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [详解element-ui级联菜单(城市三级联动菜单)和回问题](https://download.csdn.net/download/weixin_38664612/12935194)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值