图片上传相关

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片上传相关相关的知识,希望对你有一定的参考价值。

说明:之所以要转换为BASE64是因为我这个涉及到跨系统图片的传输。将file传输到另外一个系统,另外一个系统再进行文件上传。

这之间,从A到B的过程,图片是存在xml中的某个节点中的。到了B系统要进行xml转map的过程。所以在这个过程中,无法从map中取出byte[]或File类型的文件。因为转换过后map取出来的value值无法强转为byte[]或File,所以只能转换为BASE64字符串传值。到了B端再转为byte[]进行文件上传操作

 

 

 

public class FileStreamUtil {

private static String folderUrl;
   static BASE64Encoder encoder = new sun.misc.BASE64Encoder();
   static BASE64Decoder decoder = new sun.misc.BASE64Decoder();
   //将图片以二进制流
      public static String fileToBase64(File file) throws IOException
      {           
         BufferedImage bi;
         bi = ImageIO.read(file);   
             ByteArrayOutputStream baos = new ByteArrayOutputStream();   
             ImageIO.write(bi, "jpg", baos);   
             byte[] bytes = baos.toByteArray();
             return encoder.encodeBuffer(bytes).trim(); 
      }  

    /**
       * 将二进制转换为byte[]
       * @param base64String
          */
      public  static byte[] base64StringToImage(String base64String){   
             byte[] bytes = new byte[base64String.length()];
         try {
            bytes = decoder.decodeBuffer(base64String);
            return bytes;
         } catch (IOException e) {
            e.printStackTrace();
         }
            return bytes;            
       }  

 

   //将file文件转换为byte[]
      public static byte[]  fileToByte(File file) throws IOException
      {           
           BufferedImage bi;
           bi = ImageIO.read(file);   
           ByteArrayOutputStream baos = new ByteArrayOutputStream();   
           ImageIO.write(bi, "jpg", baos);   
           byte[] bytes = baos.toByteArray();
           return bytes;        
      }
   
        /**
         * 将file写入到目标源:该方法暂时不用
         * @param File
         */
        public static void writeFile(File file){   
          try {
            byte[] bytes=fileToByte(file);
             ByteArrayInputStream bais = new ByteArrayInputStream(bytes);   
               BufferedImage bi1 =ImageIO.read(bais); //读取源文件  
               ImageIO.write(bi1, "jpg", file);//不管输出什么格式图片,此处不需改动 
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
   
      /**
       * 文件上传到服务器
       * @param bytes
       */
      public static void wireteByte(byte[] bytes){     
          String toUrl="";//目标地址
          File w2 = new File(toUrl);//可以是jpg,png,gif格式 "d://base64String.jpg"  
          try {
             ByteArrayInputStream bais = new ByteArrayInputStream(bytes);   
               BufferedImage bi1 =ImageIO.read(bais); //读取源文件  
         ImageIO.write(bi1, "jpg", w2);//不管输出什么格式图片,此处不需改动   
      } catch (IOException e) {
         LoggerUtil.trace("FileStreamUtil-----","wireteByte---", "上传传输服务器系统出错");
         e.printStackTrace();    
      }
    }
   
     /**
    * 生成uuid
    * 获取fileId
    * @return
    */
   @SuppressWarnings("unused")
   public static String getFileId() {
         UUID uuid = UUID.randomUUID();
         String fileid = StringUtils.replace(uuid.toString(), "-", "");
         return fileid;
   }
 
   /**
    * 设置nas路径
    * @param fileId
    * @param uploadFile
    * @return
    */
   @SuppressWarnings("unused")
   public static String getFilePath(String fileId){
      String fileType = ".jpg";
      String fileName = fileId + fileType;
      String dateString = DateFormatUtil.formatDate(new Date(), "yyyyMMdd");
      String fileNasPath = folderUrl + "/scms/" + dateString + "/" + fileName;
      return fileNasPath;
   } 

}

以上是关于图片上传相关的主要内容,如果未能解决你的问题,请参考以下文章

上传图片的相关代码

图片上传组件开发

关于dropzone 设置图片上传大小等相关问题

项目相关MVC中使用WebUploader进行图片预览上传以及编辑

springboot上传图片文件相关知识

Servlet实现单个图片,多个图片上传和图片的显示功能