Java使用 FTPClient方式 实现文件上传到服务器

**

一、使用docker 安装 vsftpd**

参考文档:https://blog.csdn.net/qq_41201816/article/details/83930133
使用docker部署文件服务器:

1.1 获取镜像

#寻找vsftpd的镜像

1.1.1.docker search vsftpd

在这里插入图片描述

1.1.2.docker pull fauria/vsftpd

在这里插入图片描述

1.2 创建vsftpd容器

docker run -d -p 21:21 -p 20:20 -p 21100-21110:21100-21110 -v /Ftpfile:/home/vsftpd -e FTP_USER=连接用户名 -e FTP_PASS=连接密码 -e PASV_ADDRESS=你的ip -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 --name vsftpd --restart=always fauria/vsftpd
在这里插入图片描述

注释说明:
#FTP_USER : 设置远程连接的账户名
#FTP_PASS : 远程连接的密码
#-p进行端口绑定映射
-v进行文件目录的映射 FTP_UESR 和FTP_PASS如果设定了会在container里面的
#/etc/vsftpd/virtual_users.txt
#PASV_MIN_PORT和PASV_MAX_PORT映射的是被动模式下端口使用范围
#PASV_ADDRESS指的的宿主机地址

1.3 修改配置

1、我们先进入container里面
docker exec -i -t vsftpd bash
2、修改并生成虚拟用户模式下的用户db文件
vi /etc/vsftpd/virtual_users.txt
#编辑配置文件写入用户跟密码
3、假如我们添加了user用户
mkdir /home/vsftpd/user #建立新用户文件夹
/usr/bin/db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
#把登录的验证信息写入数据库

1.4 重启,使用Xftp验证连接

先退出容器 :Ctrl +d
重启vsftpd 服务: docker restart vsftpd

二、Java 实现文件上传**

2.1 引入maven 依赖

<dependency>
        <groupId>commons-net</groupId>
        <artifactId>commons-net</artifactId>
        <version>3.3</version>
</dependency>

2.2 编写文件上传方法

/**

  • 保存图片到文件服务器

  • @param file

  • @return
    */
    public static String uploadImageToFileServer(MultipartFile file) {

         if(file.getSize() > EViewConstant.FtpFileServer.SIZE){
             log.info("上传的文件大小超过10mb");
             return  "";
         }
         InputStream inputStream = null;
     
         String fileName = file.getOriginalFilename();
         //获取文件的格式
         String fileType = fileName.substring(fileName.indexOf(".")).toLowerCase().trim();
         //生成一个随机的文件名,避免重名覆盖
         String randomString= UUID.randomUUID().toString().replaceAll("-","");
         String fileNewName = randomString+fileType;
     
         FTPClient ftpClient = new FTPClient();
         try{
             //连接到FTP 服务器
             ftpClient.connect(EViewConstant.FtpFileServer.HOST, EViewConstant.FtpFileServer.PORT);
             ftpClient.login(EViewConstant.FtpFileServer.USER_NAME,EViewConstant.FtpFileServer.PASSWORD);
             //ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);
             ftpClient.changeWorkingDirectory("/Ftpfile/eiot");
             //ftp上传文件是以文本形式传输的,所以多媒体文件会失真,需要转为二进制形式传输
             ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
             if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
                 log.info("未连接到FTP,用户名或密码错误。");
                 ftpClient.disconnect();
             } else {
                 log.info("FTP连接成功");
             }
             long start = System.currentTimeMillis();
             inputStream = file.getInputStream();
             //转码后可以文件名可以为中文ftpClient.storeFile(new String(fileNewName.getBytes("GBK"), "iso-8859-1"), inputStream);
            // ftpClient.enterLocalPassiveMode();
             boolean fig = ftpClient.storeFile(fileNewName, inputStream);
             if(fig){
                 long end = System.currentTimeMillis();
                 log.info(String.format("文件:%s上传成功,耗时:%d毫秒",fileNewName,(end-start)));
             }else {
                 log.info("上传失败");
                 return  "";
             }
         }catch (IOException io){
              io.printStackTrace();
              log.error("保存图片到文件服务器ERROR:"+io.getMessage());
              return  "";
         }finally {
             //关闭资源
             try {
                 if(null != inputStream){
                     inputStream.close();
                 }
                 //退出
                 ftpClient.logout();
                 //断开连接
                 ftpClient.disconnect();
             }catch (IOException io){
                 log.error("保存图片到文件服务器关闭资源ERROR"+io.getMessage());
             }
         }
         return  EViewConstant.FtpFileServer.IMAGE_URL+fileNewName;
    

}
上传成功
在这里插入图片描述
在这里插入图片描述

三、图片展示

3.1 文件展示需要配置nginx 的配置文件

/etc/nginx/conf.d
vi default.conf
增加一个server配置
在这里插入图片描述
#图片配置
server{
listen 90;
server_name localhost;
location ~ .(gif|jpg|jpeg|png|bmp|swf)$ {
root /Ftpfile;
proxy_temp_path /Ftpfile;
}
}
设置nginx 访问权限(修改为root):
在这里插入图片描述
浏览器地址直接输入:ip +端口+图片路径
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现从前端上传和下载PDF文件FTP服务器,可以使用Java编程语言和FTP客户端库。 首先,需要在前端创建一个文件上传表单,并设置相应的文件选择按钮、提交按钮和处理逻辑。用户选择要上传的PDF文件后,将文件发送给后端服务器。 接下来,后端使用Java编写一个处理上传文件的控制器。控制器接收到文件后,使用FTP客户端库连接到FTP服务器。可以使用Apache Commons Net库中提供的FTPClient类。通过FTPClient,可以使用connect()方法连接到FTP服务器使用login()方法提供用户名和密码进行登录验证,使用setFileType()方法设置文件类型为二进制,并使用storeFile()方法将文件存储到FTP服务器指定的路径。 要实现FTP服务器下载PDF文件,可以在前端创建一个下载按钮,用户点击按钮后,发起对控制器的请求。后端代码中,使用FTPClient连接到FTP服务器后,使用retrieveFile()方法从服务器下载指定的PDF文件到本地。 在实现上传和下载的过程中,需要注意异常处理和文件路径的设置。确保FTP服务器的地址、端口、用户名和密码正确,并确保FTP服务器的路径正确。 在整个过程中,还需要考虑文件的命名策略和权限管理。可以在上传文件时为文件生成唯一的文件名,避免文件冲突。此外,还可以设置FTP服务器的权限,确保上传的文件只能被授权的用户访问和下载。 通过以上步骤,就可以使用Java实现从前端上传和下载PDF文件FTP服务器了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值