`

远程下载、图片压缩到指定大小、FTP的上传、文件的删除 /copy

    博客分类:
  • java
阅读更多

 



package com.cmmb.mall.service;


import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.BufferedInputStream;

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import java.net.URLConnection;

import java.util.Properties;


import javax.imageio.ImageIO;


import org.apache.commons.io.IOUtils;

import org.apache.commons.net.ftp.FTPClient;

import org.springframework.stereotype.Service;


import com.sun.image.codec.jpeg.JPEGCodec;

import com.sun.image.codec.jpeg.JPEGImageEncoder;

 

 

 

/**

 * 处理压缩图片

 * @param url 图片原地址

 * @param downUrl 下载到本地图片地址

 * @param productName 商品名称

 * @param tempUrl  存放图片临时文件地址

 * @param picImageUrl 处理之后的图片地址

 * @param pcModel   机型

 * @return  处理后的图片地址,用于FTP上传

 */

 public  String[] useImageDiapose(String url,String downUrl,String productName,String tempUrl,String picImageUrl,String pcModel){

 String httpUrl[] = new String[2];

 try {

 ImageToolDiapose mypic = new ImageToolDiapose();  

 /*File picFileL =  new File(picImageUrl+"L/");

 if(!picFileL.exists()){

 picFileL.mkdir();

 }

 File picFileM =  new File(picImageUrl+"M/");

 if(!picFileM.exists()){

 picFileM.mkdir();

 }*/

 String filePath = mypic.saveUrlAs(url, downUrl);

 System.out.println(filePath);

 File file = new File(filePath);


 String[] imgList = file.list();

 for (int i = 0; i < imgList.length; i++) {

 //文件名

 String fileName = productName;

 fileName += imgList[i].substring(imgList[i].lastIndexOf("."));

 //copy到指定临时路径,对文件重命名

 mypic.copyFile(filePath+"/"+imgList[i], tempUrl, fileName);

 if(pcModel.equals("240x320")){

 //机型1

 //中图

 mypic.compressPic(tempUrl,picImageUrl+"240x320/M/", fileName,fileName,125, 125, false);

 httpUrl[0] = picImageUrl+"240x320/M/"+fileName;

 //大图

 mypic.compressPic(tempUrl,picImageUrl+"240x320/L/", fileName,fileName,240, 240, false);

 httpUrl[1] = picImageUrl+"240x320/L/"+fileName;

 }

 if(pcModel.equals("320x480")){

 //机型2

 //中图

 mypic.compressPic(tempUrl,picImageUrl+"320x480/M/", fileName,fileName,195, 195, false);

 httpUrl[0] = picImageUrl+"320x480/M/"+fileName;

 //大图

 mypic.compressPic(tempUrl,picImageUrl+"320x480/L/", fileName,fileName,320, 320, false);

 httpUrl[1] = picImageUrl+"320x480/L/"+fileName;

 }

 if(pcModel.equals("480x800")){

 //机型3

 //中图

 mypic.compressPic(tempUrl,picImageUrl+"480x800/M/", fileName,fileName,290, 290, false);

 httpUrl[0] = picImageUrl+"480x800/M/"+fileName;

 //大图

 mypic.compressPic(tempUrl,picImageUrl+"480x800/L/", fileName,fileName,480, 480, false);

 httpUrl[1] = picImageUrl+"480x800/L/"+fileName;

 }

 if(pcModel.equals("540x960")){

 //机型4

 //中图

 mypic.compressPic(tempUrl,picImageUrl+"540x960/M/", fileName,fileName,330, 330, false);

 httpUrl[0] = picImageUrl+"540x960/M/"+fileName;

 //大图

 mypic.compressPic(tempUrl,picImageUrl+"540x960/L/", fileName,fileName,540, 540, false);

 httpUrl[1] = picImageUrl+"540x960/L/"+fileName;

 }

 if(pcModel.equals("640x960")){

 //机型4

 //中图

 mypic.compressPic(tempUrl,picImageUrl+"640x960/M/", fileName,fileName,390, 390, false);

 httpUrl[0] = picImageUrl+"640x960/M/"+fileName;

 //大图

 mypic.compressPic(tempUrl,picImageUrl+"640x960/L/", fileName,fileName,640, 640, false);

 httpUrl[1] = picImageUrl+"640x960/L/"+fileName;

 }

 //删除文件

 mypic.deleteFile(tempUrl+fileName);

 mypic.deleteFile(filePath+"/"+imgList[i]);

 //System.out.println("处理图片成功---------------");

 }

 } catch (Exception e) {

 System.out.println("处理图片失败----------------");

 e.printStackTrace();

 }

 return httpUrl;

 }

 

 // 图片处理    


    public String compressPic() {    


        try {    


            //获得源文件    


            file = new File(inputDir + inputFileName);    


            if (!file.exists()) {    


                return "";    


            }    


            Image img = ImageIO.read(file);    


            // 判断图片格式是否正确    


            if (img.getWidth(null) == -1) {   


                System.out.println(" can't read,retry!" + "<BR>");    


                return "no";    


            } else {    


                int newWidth; int newHeight;    


                // 判断是否是等比缩放    


                if (this.proportion == true) {    


                    // 为等比缩放计算输出的图片宽度及高度    


                    double rate1 = ((double) img.getWidth(null)) / (double) outputWidth + 0.1;    


                    double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0.1;    


                    // 根据缩放比率大的进行缩放控制    


                    double rate = rate1 > rate2 ? rate1 : rate2;    


                    newWidth = (int) (((double) img.getWidth(null)) / rate);    


                    newHeight = (int) (((double) img.getHeight(null)) / rate);    


                } else {    


                    newWidth = outputWidth; // 输出的图片宽度    


                    newHeight = outputHeight; // 输出的图片高度    


                }    


               BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);    


                  


               /*  


               * Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的  


                * 优先级比速度高 生成的图片质量比较好 但速度慢  


                */    


               tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);   


               FileOutputStream out = new FileOutputStream(outputDir + outputFileName);   


               // JPEGImageEncoder可适用于其他图片类型的转换    


               JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

               

               //System.out.println("执行压缩质量==");

               JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tag);

               param.setQuality(0.85f, false);   //设置压缩质量

               encoder.setJPEGEncodeParam(param); 

               

               encoder.encode(tag);    

               out.close();    


            }    


        } catch (IOException ex) {    


            ex.printStackTrace();    


        }    


        return "ok";    


   }    

 /**

 * FTP上传

 * @param dir 资源目录

 * @param ftpip ip地址

 * @param port 端口号

 * @param ftpuser 用户名

 * @param ftppassword 密码

 * @param path 要上传到的目录

 * @return

 */

 public  boolean ftpUpload(String dir, String ftpip, int port,

 String ftpuser, String ftppassword,String path) {


System.out.println("================FTPINFOMATION======================"

 + "dir-" + dir + "ftpip-" + ftpip + "port-" + port

 + "ftpuser-" + ftpuser + "ftppasswd-" + ftppassword);

 FTPClient ftpClient = new FTPClient();


 FileInputStream fis = null;


 File srcdir = new File(dir);


 boolean a = false;


 String ftp_model = "1";


 try {

 System.out.println(dir + "===========dir===========");

 //与FTP建立连接

 ftpClient.connect(ftpip, port);


 if (!"".equals(ftp_model) && ftp_model.equals("1")) {

 // 新添加 ( 被动模式 ),程序默认为主动

 ftpClient.enterLocalPassiveMode();

 }

 //设置登录名密码

 ftpClient.login(ftpuser, ftppassword);

 // 设置上传目录,(Ftp用戶的目录)

 ftpClient.changeWorkingDirectory(path);


 ftpClient.setBufferSize(1024);


 ftpClient.setControlEncoding("GBK");


 // 设置文件类型(二进制)


 ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);


 if (srcdir.isDirectory()) {// 如果是目录


 File files[] = srcdir.listFiles();


 for (int i = 0; i < files.length; i++) {


 if (files[i].isFile()) {


 fis = new FileInputStream(files[i]);


 ftpClient.storeFile(files[i].getName(), fis);

 }

 }


 } else if (srcdir.isFile()) {// 如果是文件


 fis = new FileInputStream(srcdir);


System.out.println("==========storeName========="+srcdir.getName());

 System.out.println("==========storeName========="+new String(srcdir.getName().getBytes("GBK"),"iso-8859-1"));

 ftpClient.storeFile(new String(srcdir.getName().getBytes("GBK"),"iso-8859-1"), fis);

 }


 a = true;


 } catch (IOException e) {


 e.printStackTrace();


 throw new RuntimeException("FTP客户端出错!", e);


 } finally {


 IOUtils.closeQuietly(fis);


 try {


 ftpClient.disconnect();


 } catch (IOException e) {


 e.printStackTrace();


 throw new RuntimeException("关闭FTP连接发生异常!", e);


 }


 }

 return a;


 }

 

 

/**

     * 下载远程文件

     * @param photoUrl 文件路径

     * @param localPath 下载到本地的路径

     * @return 是否成功

     */

    public String saveUrlAs(String photoUrl, String localPath) {

      String filePath = null;

        try {

        

          File file = new File(localPath);

          if(!file.exists()){

          file.mkdir();

          }

          //临时文件名

          String dowmFileName = photoUrl.substring(photoUrl.lastIndexOf("/"));

        

          String tempFileName = file+dowmFileName;

        

          filePath = file.toString();

        

            URL url = new URL(photoUrl);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            DataInputStream in = new DataInputStream(connection.getInputStream());

            DataOutputStream out = new DataOutputStream(new FileOutputStream(tempFileName));


            byte[] buffer = new byte[4096];

            int count = 0;

            while ((count = in.read(buffer)) > 0) {

                out.write(buffer, 0, count);

            }

            out.close();

            in.close();

            return filePath;


        } catch (Exception e) {

            System.out.println(e);

            return null;

        }

    }


    /**

     * 获取远程文件的内容(兼容HTTP与FTP)

     * @param urlString 文件路径

     * @return 文件内容

     */

    public  String getDocumentAt(String urlString) {

        StringBuffer document = new StringBuffer();


        try {

            URL url = new URL(urlString);

            URLConnection conn = url.openConnection();

            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"UTF-8"));

            String line = null;

            while ((line = reader.readLine()) != null) {

                document.append(line + "\n");

            }

            reader.close();

        } catch (MalformedURLException e) {

            System.out.println("Unable to connect to URL: " + urlString);

        } catch (IOException e) {

            System.out.println("IOException when connecting to URL: " + urlString);

        }

        return document.toString();

    }

 

// main测试    


   // compressPic(大图片路径,生成小图片路径,大图片文件名,生成小图片文名,生成小图片宽度,生成小图片高度,是否等比缩放(默认为true))   


   public static void main(String[] arg) {       

   ImageToolDiapose imageTool = new ImageToolDiapose();

   

   Properties props = new Properties(); 

   //读取配置文件

   String urlpath = ImageToolDiapose.class.getClassLoader().getResource(("util.properties")).toString().substring(6);

   String empUrl = urlpath.replace("%20", " ");

   InputStream in = null;

   try {

    in = new BufferedInputStream(new FileInputStream(empUrl));

    props.load(in);

   } catch (FileNotFoundException e1) {

    e1.printStackTrace();

   } catch (IOException e1) {

    e1.printStackTrace();

   }

   

   System.out.println(props.get("ftpIp")+"="+props.getProperty("ftpPwd"));

  /* Properties p = new Properties();

 try {

 InputStream inStream = new FileInputStream(new File("/util.properties")); 

  

 p.load(inStream);

 } catch (Exception e) {

 e.printStackTrace();

 }

 System.err.println(p.get("ftpUser"));*/

 String url1[] = imageTool.useImageDiapose("http://img02.taobaocdn.com/bao/uploaded/i2/T1ZH6kXdtXXXacfj.9_103917.jpg","d:/img","806","c:/img/", "e:/image/","320x480");

 imageTool.ftpUpload(url1[0], "192.168.1.117", 21,"pic", "123456","/320X480/M");

 imageTool.ftpUpload(url1[1], "192.168.1.117", 21,"pic", "123456","/320X480/L");

  

 //String url2[] = imageTool.useImageDiapose("http://img02.taobaocdn.com/bao/uploaded/i2/T16cfiXixbXXXPghU6_061818.jpg","d:/img","中华人民","c:/img/", "e:/image/","640x960");

 //imageTool.ftpUpload(url2[0], "192.168.1.117", 21,"pic", "123456","/640X960/M");

 //imageTool.ftpUpload(url2[1], "192.168.1.117", 21,"pic", "123456","/640X960/L");

   /*String photoUrl = "http://img01.taobaocdn.com/bao/uploaded/i1/T1UltYXhVbXXbIbiAZ_032637.jpg";

       String fileName = photoUrl.substring(photoUrl.lastIndexOf("/"));

       System.out.println(fileName);

       String filePath = "D:/img";*/

      // System.out.println(ImageToolDiapose.getDocumentAt(photoUrl));

       //ImageToolDiapose.saveUrlAs(photoUrl, filePath + fileName);

//       System.out.println("Run ok!\n Get URL file " + flag);


   }    


}

 

 

--------------------------------------------------------------------------------------------------------------


本实例流程:1、下载远程文件图片到本地

  2、对图片处理(按照不同大小)

  3、将处理好的图片用FTP方式上传到指定目录

 

1
0
分享到:
评论

相关推荐

    FTP中获取文件大小

    它允许用户从远程服务器上下载文件,或者将文件上传到服务器。本文将深入探讨如何使用Java来获取FTP服务器上的文件大小以及文件夹属性,并简要介绍FTP的一些常用命令。 **Java FTP获取文件大小** 在Java中,我们...

    微信小程序上传图片并压缩到指定大小

    3 可压缩至指定大小(php后天提取了一个方法,可等比例压缩图片到指定大小) 4 后台保存到服务器指定文件夹,路径写到了数据库对应字段 附件包含前台界面vue,页面布局css,及后台php接收、压缩图片、保存路径至...

    把图片压缩到指定的大小下.php

    把图片压缩到指定大小以下。若一次不行可再次压缩

    java ftp上传 下载 文件压缩解压

    这篇博客“java ftp上传 下载 文件压缩解压”很可能是关于如何使用Java实现FTP文件上传、下载以及文件的压缩与解压功能。下面我们将深入探讨这些知识点。 首先,FTP上传和下载是Java中常见的任务,通常通过`java...

    FTP上传文件压缩文件生成CSV文件

    在给定的场景中,我们需要实现一个功能,即通过Java编程语言生成压缩文件,并将其上传到FTP文件管理服务器,同时涉及到CSV(Comma Separated Values)文件的处理。以下是对各个文件及其所涉及知识点的详细解释: 1....

    C# winform 一款支持将图片压缩到指定大小(KB)的批量压缩软件(源码+exe导出文件双击即可使用)

    C# winform 一款支持将图片压缩到指定大小(KB)的批量压缩软件(源码+exe导出文件双击即可使用)

    java图片压缩处理(可以压缩为任意大小

    本主题将深入探讨如何使用Java实现图片压缩,并能够将其调整到任意大小,同时保持图片质量并避免变形。 首先,我们需要理解图片压缩的基本原理。图片压缩主要有两种类型:有损压缩和无损压缩。有损压缩会牺牲一部分...

    Android图片压缩方法并压缩到指定大小

    Android图片压缩方法并压缩到指定大小 Android图片压缩是一种常用的技术,用于减少图片的大小,使其更适合在移动设备上显示。今天,我们将分享三种压缩图片的方法,并将其压缩到指定大小。 图片质量压缩 图片...

    java图片压缩文件大小图片大小(支持gif动态图)

    这个主题主要涉及如何利用Java来减少图片文件的大小,包括静态图片(如JPEG、PNG)以及动态图片(如GIF)。下面我们将深入探讨相关的知识点。 首先,Java中的核心库`javax.imageio`提供了对图片读取、写入和处理的...

    FTP远程文件同步更新

    随着技术的发展,FTP已逐渐被更现代的协议如SCP(Secure Copy)、RSYNC等取代,它们提供了更高级的功能,如断点续传、文件压缩等。此外,云存储服务如AWS S3、Google Cloud Storage等也提供了类似的文件同步服务,...

    shell脚本导出表数据并压缩文件上传指定ftp目录

    在这个场景中,我们关注的是如何利用shell脚本来实现特定的功能:根据时间条件导出数据库表数据,计算文件信息,压缩文件,以及通过FTP上传到指定的远程目录。下面将详细阐述这些知识点。 首先,我们需要理解`shell...

    图片压缩,上传后自动生成新的压缩图,可指定图片大小

    在本项目中,用户可以指定生成的压缩图片大小,这涉及到图片的分辨率调整。等比例缩放是保持图片原有宽高比的缩放方式,防止图片变形,而非等比例缩放则可能改变图片原有的宽高比,适用于特定应用场景,如适应不同...

    C# .Net压缩图片,大小仅为原图的1/10

    本文将详细介绍如何使用C# .Net技术来实现图片压缩,使得压缩后的图片大小仅为原图的1/10。 #### 压缩原理与方法 在讨论具体的代码实现之前,我们首先需要了解图片压缩的基本原理。图片压缩主要分为两种类型:无损...

    java压缩图片文件大小

    java 开发压缩图片文件大小,2m--&gt;200k 不是压缩宽高的

    【kettle012】kettle访问FTP服务器文件并处理数据至PostgreSQL

    总结起来,这个示例展示了如何利用Kettle完成一个完整的数据处理流程:从FTP服务器下载文件,使用转换进行数据预处理,然后通过PostgreSQL JDBC驱动将处理后的数据加载到PostgreSQL数据库中。这个过程对于需要定期从...

    vbs自动上传ftp

    - 实现定时上传任务,结合Windows任务计划程序,可以定期自动上传指定文件。 - 增加日志记录功能,记录每次上传的详细情况,便于后续追踪问题。 - 支持多线程上传,提高大文件的上传效率。 - 添加文件完整性校验功能...

    易语言图片压缩到最小

    对于"图片压缩到最小",我们可能需要采用有损压缩方法,因为它们可以更有效地减小文件大小。 在易语言中,实现图片压缩通常涉及以下几个步骤: 1. **读取图片**:使用易语言提供的图形处理函数,如“读取图形文件...

    FTP方式实现远程程序升级

    总结来说,FTP方式实现远程程序升级是一个涉及到服务器配置、文件上传、客户端下载和安装的过程。正确配置和使用FTP可以有效、安全地实现远程软件更新,降低维护成本。在实际操作中,一定要注意安全性和稳定性,避免...

    ftp 自动上传文件到服务器

    FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准协议,广泛应用于将文件上传至服务器或从服务器下载文件的场景。在本场景中,我们关注的是如何实现FTP的定时自动上传功能,这通常涉及到脚本编程...

Global site tag (gtag.js) - Google Analytics