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