【从网页上传图片后,要如何转换成InputStream流 _图片上传 】 | IT修真院·坑乎
问题已收录 从网页上传图片后,要如何转换成InputStream流
我也踩过这个坑( 1 )
已统计您的踩坑,无需重复点击
回答(2)
图片上传
详细描述
编辑于2024-11-26
  • [深圳|结业弟子]JAVA-苏晔
    0

    java  springMVC接收图片一般用下面的类型来接收。

    CommonsMultipartFile

    首先,CommonsMultipartFile需要在前端用表单提交,表单需要设置下面的属性:

    enctype="multipart/form-data"

    而且,CommonsMultipartFile参数需要使用下面的属性来接收

    @RequestParam

    示例如下:

    <form action="/login" enctype="multipart/form-data" method="post">
    <table>
    <tr>
    <td>请选择头像:</td>
    <td><input type="file" name="file"></td>
    </tr>
    <tr>
    <td><input type="submit" value="上传"></td>
    </tr>
    </table>

    </form>

    然后在后端使用CommonsMultipartFile自带的方法将其转化为流。


    编辑于2018-03-25
  • [北京|结业弟子]JAVA-铁木儿
    0

    楼上是一种方法

    我给你提供另外一种思路,讲base64的数据流作为传输对象


    工具类

    public class Image {
    /**
        * 将文件转换为Base64格式
        * @param [path]
        * @return  java.lang.String
        */
       public String imageToBase64(String path) {
    // 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
           byte[] data = null;
           // 读取图片字节数组
           try {
    InputStream inputStream = new FileInputStream(path);
               data = new byte[inputStream.available()];
               inputStream.read(data);
               inputStream.close();
           } catch (IOException e) {
    e.printStackTrace();
           }
    // 对字节数组Base64编码
           BASE64Encoder encoder = new BASE64Encoder();
           // 返回Base64编码过的字节数组字符串
           return encoder.encode(data);
       }
    /**
        * base64字符串转化成图片并保存到本地
        * @param [imgStr]
        * @return  java.lang.String
        */
       public String generateImage(String imgStr) {
    Integer name = imgStr.hashCode();
           //定义文件保存的本地路径
           String filePath = "./images/";
           //定义 文件名
           String filename = name.toString()+".jpg";
           String file = filePath+filename;
           if (imgStr == null) {
    // 图像数据为空
               return null;
           } else {
    BASE64Decoder decoder = new BASE64Decoder();
               try {
    // Base64解码
                   byte[] b = decoder.decodeBuffer(imgStr);
                   for (int i = 0; i < b.length; ++i) {
    if (b[i] < 0) {
    // 调整异常数据
                           b[i] += 256;
                       }
    }
    OutputStream out = new FileOutputStream(file);
                   out.write(b);
                   out.flush();
                   out.close();
                   return filename;
               } catch (Exception e) {
    e.printStackTrace();
               }
    }
    return filename;
       }

    两个方法,一个接收文件地址(也就是文件本身),另一个将文件转换为base64格式的数据流进行传输,服务器接收到数据流后,还原成文件,重命名,保存。这个工具类既可以接收文件形式,也可以直接加base64格式的图片上传(编辑器环境)。

    编辑于2018-09-21