• 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);
  • 相关阅读:
    【原创翻译】The Free Lunch Is Over
    【原创】基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(二)
    【原创】基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(一)
    实现内容提供者步骤
    为什么需要内容提供者
    aidl的应用场景
    aidl介绍
    百度音乐盒框架
    通过接口方式调用服务里面的方法
    通过bindservice方式调用服务方法里面的过程
  • 原文地址:https://www.cnblogs.com/forever2h/p/6861646.html
Copyright © 2020-2023  润新知