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);