《技术分享》图片上传

记录一下图片上传的代码 哈

供以后参考,可以大致修改一下代码来搬砖。。。。。。。

先来说一下场景,这里是在spring环境下,是他里面的一个接口MultipartFile
代码里面用的ResultMoudel这个是我自己封装的一个返回结果包装类,可自行替换掉。

/**
     * 
     * @Title: getImgDirFile   
     * @Description:图片上传
     * @author:  
     */
public ResultMoudel upload(MultipartFile imgFile){
		if (imgFile.isEmpty()) {
            return new ResultMoudel("error","上传失败,请选择文件");
        }
		//验证文件格式
		Boolean checkFileFormat = UploadValidateUtil.checkFileFormat("jpg,jpeg,png,gif",imgFile.getOriginalFilename());
		if(!checkFileFormat){
			return new ResultMoudel("error","文件格式不正确,只能包含jpg,jpeg,png,gif图片类型");
		}
		//验证文件大小
		Boolean checkFileSize = UploadValidateUtil.checkFileSize(imgFile.getSize(), 10, "M");
		if(!checkFileFormat){
			return new ResultMoudel("error","文件大小超出范围,只能上传10M以下的图片");
		}
		//调用下载到指定路径
		ResultMoudel upload = uploadImage(imgFile);
		return upload;
	}

下边是上面调用的方法---->

//验证文件格式,在上面调用了
private static final String FILE_TYPE = "doc,dot,docx,dotx,docm,dotm,xls,xlt,xla,xlsx,xltx,xlsm,xltm,xlam,xlsb,xml,ppt,pot,pps,ppa,pptx,potx,ppsx,ppam,pptm,potm,ppsm,bmp,jpg,jpeg,png,gif,txt,zip,rar,7z,pdf";

public static Boolean checkFileFormat(String fileType,String fileName){
		if (StringUtils.isBlank(fileType)) {
			fileType = FILE_TYPE;
		}
		// 获取文件后缀名
		String extName = fileName.substring(fileName.indexOf(".") + 1).toLowerCase().trim();
		// 判断是否为允许上传的文件类型
		if (!Arrays.asList(fileType.split(",")).contains(extName)) {
			return false;
		}
		return true;
	}
//验证文件大小
public static Boolean checkFileSize(Long len, int size, String unit) {
		double fileSize = 0;
		if ("B".equals(unit.toUpperCase())) {
			fileSize = (double) len;
		} else if ("K".equals(unit.toUpperCase())) {
			fileSize = (double) len / 1024;
		} else if ("M".equals(unit.toUpperCase())) {
			fileSize = (double) len / 1048576;
		} else if ("G".equals(unit.toUpperCase())) {
			fileSize = (double) len / 1073741824;
		}
		if (fileSize > size) {
			return false;
		}
		return true;
	}
//上传图片,在第一个方法里面调用了
public ResultMoudel uploadImage(MultipartFile imgFile){
    	
    	ResultMoudel msg = new ResultMoudel();
         // 拿到文件名
         String filename = imgFile.getOriginalFilename();
         
         // 存放上传图片的文件夹
         File fileDir = getImgDirFile();
         // 输出文件夹绝对路径  -- 这里的绝对路径是相当于当前项目的路径而不是“容器”路径
         System.out.println(fileDir.getAbsolutePath());
         filename = filename.substring(0,filename.indexOf("."))+new Date().getTime()+filename.substring(filename.indexOf(".")).toLowerCase().trim();
         try {
             // 构建真实的文件路径
             File newFile = new File(fileDir.getAbsolutePath() + File.separator + filename);
             System.out.println(newFile.getAbsolutePath());

             // 上传图片到 -》 “绝对路径”
             imgFile.transferTo(newFile);
             msg.setResultFlag("success");
             msg.setBody(filename);
         } catch (IOException e) {
             e.printStackTrace();
         }
         return msg;
    }
//文件夹不在就创建
public final static String IMG_PATH_PREFIX = "yc-water/yc-modules/yc-produce-regulation/static/upload/imgs";

private File getImgDirFile(){
        // 构建上传文件的存放 "文件夹" 路径
        String fileDirPath = new String(CommonConstants.IMG_PATH_PREFIX);

        File fileDir = new File(fileDirPath);
        if(!fileDir.exists()){
            // 递归生成文件夹
            fileDir.mkdirs();
        }
        return fileDir;
    }

再强调一下哈,ResultMoudel只是我自己写的一个结果封装类,大家可以把它换成String 返回图片相对路径给前端页面src。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值