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