httpclient base64 文件上传_文件上传下载

说道文件上传下载,这个业务需求并不是很复杂思想如下

    1.将文件上传到 某台服务器上的指定的路径下也可以这样理解

文件上传就是将本地图片发送到别的地方,下载就是将别的地方的图片放在本地

    2.将路径同文件名等等相关的信息存储入库''

    3.完成

 思考一下哈:

    1.所谓文件上传就是文件的一个复制过程对吧

    2.文件在传输的过程中是以怎样的形式进行传输的

众所周知哈就是以流的形式进行传输的那么流到底是什么,这里我的见解哈流就是二进制的字节数组byte[]

    3.一说到流我们就会想到的是io流对吧其 基本理论知识 都是死的就是流的分类,怎样使用这些实体类,怎样更快应为我是初级,所以我的理解就在这里。见笑了哈哈。

 代码展示一下

public static void main(String[] args) {    String name = "aaa";    try {        InputStream is = new  FileInputStream        ("D:\\c.jpg");        OutputStream os = new FileOutputStream        ("D:\\DaiMa\\2020914203533\\src\\com\\zkp\\test\\controller\\image\\"+name+".jpg");        byte[] buffer = new byte[1024];        int len = 0;        while((len=is.read(buffer))>0){            os.write(buffer,0,len);        }        is.close();        os.close();        System.out.println("文件上传成功");    } catch (Exception e) {        System.out.println(  "文件上传失败");        e.printStackTrace();    }}

上边代码没啥技术含量但就是想展示一下哈哈,咱们得一步一步走

图片上传需要和前端进行配合,这里我们就需要进行接收前端传来的图片数据

前端图片数据的类型:

  1. Multiplefile    或者是Multiplefile[]

  2. base64

Multiplefile具体实现:

@RequestMapping(value = "/addPhoto",produces = "text/html;charset=utf-8")@ResponseBodypublic String upFile(String name , MultipartFile fil , ModelMap map,                         HttpServletRequest request) throws IOException {    //一.进行接收我们前边传来的参数    //1.获取文件的名字    String name1 = fil.getName();    //2.进行获取大小    long size = fil.getSize();    //3.进行获取类型    String contentType = fil.getContentType();    //4.进行获取文件全名    String originalFilename = fil.getOriginalFilename();    //5.进行全部输出    System.out.println("名字1"+name1);    System.out.println("大小"+size);    System.out.println("类型"+contentType);    System.out.println("文件 全名"+originalFilename);    //进行创建文件的存储的名字,这里我们不能使其出现重复所以我们使用的是随机    //文件名:UUID+上传文件的扩展名    String pictureName = UUID.randomUUID().toString()            +originalFilename.substring(originalFilename.lastIndexOf("."));    System.out.println("文件的新名字"+pictureName);    //System.out.println(pictureName);    map.put("a",name1);    map.put("b",size);    map.put("c",contentType);    map.put("d", originalFilename);    map.put("e",pictureName);    Pic pic = new Pic();    pic.setNane1(name1);    pic.setAllName(pictureName);    pic.setName2(name);    pic.setSize(size);    pic.setType(contentType);    try {        //文件名   转移转换   新的文件   文件存放的地址  文件名       String  path = request.getServletContext().getRealPath("")+"/images";        System.out.println(path);        File file = new File(path,"aaa"+originalFilename.substring        (originalFilename.lastIndexOf(".")));        if (!file.exists()){            file.mkdirs();        }        fil.transferTo(file);    } catch (IOException e) {        e.printStackTrace();        request.setAttribute("success","添加成功");        return "error";    }    request.setAttribute("error","添加失败");    return "okPage";}

当然也能这样进行实现

@RequestMapping(name="/upload",produces = "text/html;charset=utf-8")@ResponseBodypublic String upload(MultipartFile file, String username, HttpServletRequest request){//对象名必须和name相同    System.out.println("username"+username);    try {        String name = file.getOriginalFilename();        Random random = new Random();        String fileName = System.currentTimeMillis()+""+random.nextInt(10000);        file.transferTo(new File("D:/"+fileName));    } catch (IOException e) {        e.printStackTrace();        return "上传失败";    }    return "上传成功";}

base64具体实现(直接进行调用就可)

 /**     * 将base64数据转为二进制数据并上传到指定文件夹     * @param path     * @param base64     * @return     */    public static  boolean  base64ToImage(String  path,String  base64){        boolean  flag = true;        OutputStream outputStream = null;        try {            byte[] bytes = new BASE64Decoder().decodeBuffer(base64);            for (int i = 0; i < bytes.length; i++) {                if(bytes[i]<0){                    bytes[i]+=256;                }            }            outputStream = new FileOutputStream(path);            /**             * 将数据写出             */            outputStream.write(bytes);        } catch (IOException e) {            e.printStackTrace();            flag=false;        }finally {            if (outputStream!=null) {                try {                    outputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return  flag;    }

补充将图片转换为base64

  /**     * 将图片转换为base64     * @return     */    public static String  imageToBase64( String imagePath ){        /**         * 1.将本地图片转换为字节数据         */        InputStream inputStream = null;        byte[] buffer = null;        try {            inputStream =  new FileInputStream(imagePath);            int count=0;            while (count==0){                count = inputStream.available();            }            buffer=new byte[count];            inputStream.read(buffer);        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }finally {            if(inputStream!=null){                try {                    inputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        String result = new BASE64Encoder().encode(buffer);        System.out.println(result);        return result;    }

上边就是我遇到的常用的方式,还有就是创建文件的时候

如:

D:\\c.jpg我理解为带后缀为文件,不带的为文件夹哈哈,因为我是自学的,所以好多东西需要自己摸索,见谅了.

扩展:

  1. 添加多个文件MultipartFile[]

@Overridepublic String insertUser3(User userRegist, MultipartFile[] fil, HttpServletRequest request) {    //进行遍历    for (int i = 0; i         MultipartFile picture = fil[i];        String name = picture.getName();        long size = picture.getSize();        String originalFilename = picture.getOriginalFilename();        String fileName=System.currentTimeMillis()                +picture.getOriginalFilename().substring(picture.getOriginalFilename().lastIndexOf("."));        String  path1 = request.getServletContext().getRealPath("")+"static\\img2\\";        System.out.println("项目所在的路径为"+path1);        //创建文件夹对象        File file=new File(path1+fileName);        if(!file.getParentFile().exists()){//如果文件夹不存在            System.out.println("====================进行创建了文件====================");            file.getParentFile().mkdir();//创建文件夹        }        try {            picture.transferTo(file);            System.out.println("");            System.out.println("文件上传成功");        } catch (IOException e) {            e.printStackTrace();        }        System.out.println("第"+i+"个图片是"+name+"数据的长度是"+size+"另一个名字是"+originalFilename);    }    return "创建成功";}

至于前端实质上就是发送post请求,这个请求怎样实现呢就是form表单提交或者是ajax进行发送。

<form action="addPhoto" method="post" enctype="multipart/form-data">    用户姓名:<input type="text" value="" name="name">    <br/>    用户头像:<input type="file" value="" name="fil">    <br/>    <input type="submit" value="提交"> form>

我可能整理的比较乱但是,要是有啥好的建议随时沟通

之一ajax进行发送就是使用key-value的方式进行实现,value就是图片转换为base64的值

这里base64就是实质上就是进行编码和进行解码编码就是将二进制的

byte[ ]数组转换为String类型的字符串,解码就是将tring类型的字符串转换为byte[ ]类型的二进制数组

总而言之就是数据格式的抓换和文件位置的转换,还是天上飞的理论总有落地的实现

    在加点:就是前端传来数据,这个护具就是base64或者是流(就是二进制数组)后端进行接收,前端怎样传来后端怎样接收,上有政策下有对策哈哈。    反正我就知道这两种形势,你要是有知道的随时联系我哈哈,咱们互相进步

有问题加微信联系哦!

c1173ff829afa7efe8225b06657dba1f.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值