ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis 实现图片上传下载demo

2020-11-14 19:00:45  阅读:340  来源: 互联网

标签:String demo 上传下载 redis imgBytes file imgString import name


1:依赖包:
<!--    JSON依赖包-->
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>fastjson</artifactId>
           <version>1.2.28</version>
       </dependency>

  

2:图片编解码工具类
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;

/**
 * @version 1.0
 * @name 
 * @date 2020/11/6 16:12
 * @function 图片编解码工具类
 */
public class EncodeImgUtil
{
    /**
     * @author
     *  将图片内容处理成Base64编码格式
     * @version 1.0
     */
    public static String encoderImg(MultipartFile file ){
        String imgString  = null;
        byte[] imgBytes = null;

        try{
            //将图片转化为字节数组
            imgBytes = file.getBytes();
        }catch (Exception e){
            e.printStackTrace();
        }

        //将图片字节数组进行Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        imgString = encoder.encode(imgBytes);
        return imgString;
    }

    /**
     * @author 将图片内容处理成Base64解码格式
     *  将图片解码 imgString 图片Base64编码格式
     * @version 1.0
     */
    public static byte[] decoderImg(String imgString)throws IOException
    {
        byte[] imgBytes = null;
        BASE64Decoder base64Decoder = new BASE64Decoder();
        imgBytes = base64Decoder.decodeBuffer(imgString);
        return imgBytes;

    }

}

  

3:页面:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图片上传</title>
    <script src="../js/jquery.js"></script>

    <script>
        $(function () {
            $("#btn").click(function () {
                var formData = new FormData();
                var file = $("#file")[0].files[0];
                formData.append("file",file);

                $.ajax({
                    url:"/user/upload",
                    type:"post",
                    data:formData,
                    processData: false, //使数据不做处理
                    contentType:false, //不要设置请求头
                    success:function (result) {
                            if(result == "OK"){
                                alert("上传成功")
                            }else{
                                alert("上传失败")
                        }
                    }
                })


            })

            $("#btn2").click(function () {
                    $.ajax({
                        url:"/user/download",
                        type:"post",
                        dataType:"json",
                        data: {"name":$("#name").val()},
                        success:function (data) {
                           // alert(data);
                            if(data =="fail"){
                                alert("下载图片失败")
                            }else{
                                //将图片显示在img中
                                $("#ImgePic").attr("src","data:image/png;base64,"+data)
                            }

                        }
                    })
            })
        })
    </script>
</head>
<body>
<!--上传图片-->
<input type="file" name="file" id="file"/><br/>
<input type="button" id="btn" value="上传图片"/><br/>

<!--下载图片-->
<input type="text" id="name" name="name"/><br/>
<input type="button" id="btn2" value="下载图片"/><br/>
<img id="ImgePic" src="ImgePic" width="800" height="600"/><br/>
</body>
</html>

  4:controller

import com.alibaba.fastjson.JSON;
import com.dtone.ssm.redis.RedisUtil;
import com.dtone.ssm.util.EncodeImgUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.UUID;

/**
 * @version 1.0
 * @name
 * @date 2020/11/6 16:38
 * @function 图片上传/下载页面请求控制器类
 */
@RestController
@Slf4j // Lombok 插件创建 Logger 日志对象
public class ImgController
{
    @Autowired
    private RedisUtil redisUtil;


    @RequestMapping("user/upload")
    public String upload(MultipartFile file){
        log.info("收到upload请求");

        //获取文件名
        String fileName = file.getOriginalFilename();

        //随机生成唯一ID
       // String uuid = UUID.randomUUID().toString();

        //将文件转化为Base64编码格式
       String imgString = EncodeImgUtil.encoderImg(file);

       //将文件存储到redis
        if(redisUtil.exists(fileName)){
            return "fail";
        }
        redisUtil.set(fileName,imgString);
        return "OK";

    }

    @RequestMapping("user/download")
    public String download(String name) throws IOException {
        log.info("收到user/dpwnload请求"+name);

        if(name !=null){
            //从redis获取Base64为编码格式
            String imgString  = (String) redisUtil.get(name);

            //将Base64编码格式图片转化为字节数组
            byte[] imgBytes = EncodeImgUtil.decoderImg(imgString);

            //将图片字节数组转化为JSON格式发送给客户端
            return JSON.toJSONString(imgBytes);
        }
        return "fail";


    }
}

  

标签:String,demo,上传下载,redis,imgBytes,file,imgString,import,name
来源: https://www.cnblogs.com/liangqianlz/p/13974317.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有