ftp 之 使用java将文件上传到ftp服务器上

1. 在实际的应用重,通常是通过程序来进行文件的上传。

2. 实现java上传文件到ftp服务器中

  • 新建maven项目
  • 添加依赖
    <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.3</version>
        </dependency>

    测试

  • @Test
       public void testFtp1(){
           //创建客户端对象
           FTPClient ftp = new FTPClient();
           InputStream local=null;
           try {
               //连接ftp服务器
               ftp.connect("192.168.80.161", 21);
               //登录
               ftp.login("ftpuser", "1111");
               //设置上传路径
               String path="/home/ftpuser/image";
               //检查上传路径是否存在 如果不存在返回false
               boolean flag = ftp.changeWorkingDirectory(path);
               if(!flag){
                   //创建上传的路径  该方法只能创建一级目录,在这里如果/home/ftpuser存在则可创建image
                   ftp.makeDirectory(path);
               }
               //指定上传路径
               ftp.changeWorkingDirectory(path);
               //指定上传文件的类型  二进制文件
               ftp.setFileType(FTP.BINARY_FILE_TYPE);
               //读取本地文件
               File file = new File("mm.jpg");
               local = new FileInputStream(file);
               //第一个参数是文件名
               ftp.storeFile(file.getName(), local);
            } catch (SocketException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    //关闭文件流
                    local.close();
                    //退出
                    ftp.logout();
                    //断开连接
                    ftp.disconnect();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
       }

     

     

 

3. 优化java上传代码:

  如何解决上传的图片重名的问题?如果不解决,那么上传相同名称的图片将会覆盖之前文件。

  可以通过重写设置图片名称来,即将图片名为uuid的名称。

 

 

//生成上传文件的名称
    public static String getFileName(String primitiveFileName){
        //使用uuid生成文件名
        String fileName=UUID.randomUUID().toString();
        //获取文件后缀
        String suffix=primitiveFileName.substring(primitiveFileName.lastIndexOf("."));
        return fileName+suffix;
    }

 

2. 当每天上传的图片很多时,如何管理这些图片?

  通常会根据年份,月份,日期,来创建目录来存放数据。

 

 //设置上传路径
               String basePath="/home/ftpuser/image/";
               Date currentDate = new Date();
               String dateStr=new SimpleDateFormat("yyyy/MM/dd").format(currentDate);
               for(String pathStr:dateStr.split("/")){
                   basePath+=pathStr+"/";
                   boolean flag = ftp.changeWorkingDirectory(basePath);
                   if(!flag){
                       //创建上传的路径  该方法只能创建一级目录,在这里如果/home/ftpuser存在则可创建image
                       ftp.makeDirectory(basePath);
                   }
               }
               //指定上传路径
               ftp.changeWorkingDirectory(basePath); 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值