java保存上传的图片到指定目录下(亲测有效)

背景:由于近期使用layui写前端,其中用它的控件实现图片上传,拿到的是转成Base64的数据,数据如下:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAY4AAADvCAYAAADl2zM3AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAANjRSURBVHhe7P1XsyzZmaaJnb9GM86wVXUJa......

所以本篇主要针对如何把转成Base64的数据下载到指定的目录下。


1、由于已经拿到了String类型的Base64数据,那我们可以直接把这数据通过Ajax传到后台

部分前端代码如下(demo代码来自layui文档):

部分Ajax请求

var img = body.find("#demo1").val();//图片数据,此时是Base64转换后的
param.img = img;
var params = {};
params.productName = productName;
params.sort = sort;
params.description = decrp;
params.img = img;
$.ajax({
     url:basePath+"/product/addProduct",
     dataType:'json',
     type:"POST",
     data:params,
     cache:false,
     success:function (result) {
            parent.layer.msg(result.msg,{time:5000});
            if(result.returnValue="OK"){
                location.reload();
             }
             parent.layer.closeAll();
      }
});

下面是核心方法:

 /** @Description:
     * @Author:wrb
     * @Date:2020/1/15/17:12
     * @Param data 是Base64的图片数据
     * @return java.lang.String
     */
public static String download(String data)
        String basePath = "E:/xxx/"; //图片保存路径
        //保存到数据库的图片地址(课忽略此)
        String fileSavePath = null;
        try {
            String links = data.replaceAll(" ", "+");
            if(links.startsWith("data:image")) {
                String suffix = "jpg"; // 根据links[i]获取后缀名  data:image/jpg;
                String newName = System.currentTimeMillis() + Math.random() * 1000000 + "." + suffix;
                //把"data:image/jpeg;base64,AKLJF9.."分割成{"data:image/jpg;base64,","AKLJF9.."}两部分
                String[] imgData = links.split("base64,",0);
                Base64Img.base64ToImg(imgData[1],basePath+"/" + newName);
                fileSavePath ="upload/"+ newName;
            }else {
                System.out.println("失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return fileSavePath;
    }

其中Base64Img类为:

public class Base64Img {

    import java.awt.image.BufferedImage;
    import java.io.ByteArrayInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;

    import javax.imageio.ImageIO;

    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;


    static BASE64Encoder encoder = new BASE64Encoder();
    static BASE64Decoder decoder = new BASE64Decoder();
    /**
	 * 将BASE64转为图片
	 * @param imgStr 图片BASE64编码
	 * @param savePath 图片保存路径
	 * @return
	 */
	public static Boolean base64ToImg (String imgStr, String savePath) throws IOException{
		
		if (imgStr == null){//图像数据为空  
			return false;
		}
		File file = new File(savePath);
		OutputStream out=null;
		if(!file.getParentFile().exists()){
		    //先得到文件的上级目录,并创建上级目录,在创建文件
           file.getParentFile().mkdirs();
	        }
		    try {
		        out = new FileOutputStream(file);
				//Base64解码  
		        byte[] b = decoder.decodeBuffer(imgStr);  
		        for(int i=0;i

搞定。

你可能感兴趣的:(开发技术分享,java开发)