springboot上传文件到Nginx代理的FTP文件服务器

上传文件

Controller层:

    //图片类型校验
    @Value("${picture.pictureType}")
    private String pictureType;// pictureType: ^.+.(jpg|png|gif|webp)$
    //图片大小校验
    @Value("${file.limitSize}")
    private String pictureSize; 
/**
     * @author bobo
     * 上传图片信息
     */
    @PostMapping("/insertTreeImage")
    public AjaxResult insertTreeImage(@RequestBody MultipartFile file, @RequestParam("id") Long id) throws IOException {
        //限制图片大小
        String regex=pictureSize.replaceAll("[A-Z]{2}","");
        Long limit=(Long.parseLong(regex))*1024;
        Long size = file.getSize()/1024;
        //限制图片类型
        if(!file.getOriginalFilename().matches(pictureType)){
            throw new BizException(BizCodeEnum.FILE_UPLOAD_TYPE_FAIL);
        } else if (file.isEmpty() || file==null){//验证图片是否为空
            throw new BizException(BizCodeEnum.FILE_UPLOAD_NOTFOUND_FAIL);
        }else if(size>=limit){//限制图片大小
            throw new BizException(BizCodeEnum.FILE_UPLOAD_SIZE_FAIL);
        }else {
            AjaxResult ajaxResult = ancientTreeService.uploadTreeImage(file, id);

            return AjaxResult.success("操作成功",ajaxResult);
        }
    }

service层:

 AjaxResult uploadTreeImage(MultipartFile file, Long id) throws IOException;

impl:

  /**
     * 上传图片的方法
     * @param file
     * @param id
     * @author bobo
     */
    @Override
    public AjaxResult uploadTreeImage(@RequestBody MultipartFile file , Long id) throws IOException {
        //获得图片原来的名称
        String fileName=file.getOriginalFilename();
        //防止上传后重名问题创建一个md5随机名称的文件夹
        String uploadFileName= UUID.randomUUID().toString();
        //按时间存放
        String strNow = new SimpleDateFormat("yyyyMMdd").format(new Date()).toString();
        String newFileName = uploadFileName;
        //对文件夹名称进行拼接作为上传路径
        String filePath="/"+ LitchiDirectoryName.AncientTreeDirName +"/"+strNow+"/"+newFileName;
        //拼接地址作为上传路径
        String url=nginxUrl+filePath+"/"+fileName;
        //数据存入数据库
        String address =filePath+"/"+fileName;
        AncientTreeDO ancientTreeDO=new AncientTreeDO().setTreeImage(address).setId(id);
        ancientTreeMapper.updateAncientTreePath(ancientTreeDO);

        try {
            //拿到输入流后传入ftp
            InputStream input=null;
            input = file.getInputStream();
            /** 连接ftp进行上传
              * ftpIp:自定义的ftpip地址
              * port: 端口 (默认21)
              * ftpUser: ftp用户名
              * ftpPass:ftp密码
              * basePath:上传后的根目录
              * filePath:上传文件的文件路径
              * fileName:上传后的文件名
              * input:输入流数据
              * **/
            boolean b = FtpUtil.uploadFile(ftpIp, port, ftpUser, ftpPass, basePath, filePath, fileName, input);
            if(b){
                //返回url地址进行图片反显
                return AjaxResult.success(url);
            }else {
                AjaxResult.error(425,"MESSAGE ERROR");
            }
        } catch (IOException e) {
            log.error("文件上传异常",e);

        }

        
        return AjaxResult.success(nginxUrl);
    }

FTP工具类:

public class FtpUtil {
    /**
     * Description: 向FTP服务器上传文件
     *
     * @param host     FTP服务器ip
     * @param port     FTP服务器端口
     * @param username FTP登录账号
     * @param password FTP登录密码
     * @param basePath FTP服务器基础目录,/home/ftpuser/images
     * @param filePath FTP服务器文件存放路径。例如分日期存放:/2018/05/28。文件的路径为basePath+filePath
     * @param filename 上传到FTP服务器上的文件名
     * @param input    输入流
     * @return 成功返回true,否则返回false
     */
    public static boolean uploadFile(String host, int port, String username, String password, String basePath,String filePath, String filename, InputStream input) {
        boolean result = false;
        FTPClient ftp = new FTPClient();
        try {
            int reply;
            ftp.connect(host, port);// 连接FTP服务器
            // 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
            ftp.login(username, password);// 登录
            reply = ftp.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                return result;
            }

                //切换到上传目录
                if (!ftp.changeWorkingDirectory(basePath + filePath)) {                //如果目录不存在创建目录
                    String[] dirs = filePath.split("/");
                    String tempPath = basePath;
                    for (String dir : dirs) {
                        if (null == dir || "".equals(dir)) continue;
                        tempPath += "/" + dir;
                        if (!ftp.changeWorkingDirectory(tempPath)) {
                            if (!ftp.makeDirectory(tempPath)) {
                                return result;
                            } else {
                                ftp.changeWorkingDirectory(tempPath);
                            }
                        }
                    }
                }            //设置为被动模式
                ftp.setBufferSize(1024 * 1024 * 2);
                BufferedInputStream bufferedInputStream = new BufferedInputStream(input);
                ftp.enterLocalPassiveMode();            //设置上传文件的类型为二进制类型
                ftp.setFileType(FTP.BINARY_FILE_TYPE);            //上传文件
                if (!ftp.storeFile(filename, bufferedInputStream)) {
                    return result;
                }
                input.close();
                ftp.logout();
                result = true;

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (ftp.isConnected()) {
                try {
                    ftp.disconnect();
                } catch (IOException ioe) {
                }
            }
        }
        return result;
    }
}

以上就是FTP上传的所有内容了,如果对你有帮助请点个赞

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 准备工作 在部署之前,需要确保服务器上已经安装了Java环境和Maven环境。如果没有安装,需要先安装。 2. 打包项目 使用Maven命令打包项目,生成可执行的jar包。在项目根目录下执行以下命令: mvn clean package 3. 上jar包 将生成的jar包上服务器上,可以使用FTP或者SCP等方式上。 4. 启动项目 在服务器上执行以下命令启动项目: java -jar your-project.jar 5. 配置端口 默认情况下,Spring Boot应用会使用808端口。如果需要修改端口,可以在启动命令中添加--server.port参数,例如: java -jar your-project.jar --server.port=8888 6. 配置日志 Spring Boot默认使用Logback作为日志框架。可以在application.properties文件中配置日志级别和日志输出路径,例如: logging.level.root=INFO logging.file=/var/log/your-project.log 7. 配置Nginx 如果需要将Spring Boot应用暴露在公网上,可以使用Nginx作为反向代理服务器。在Nginx配置文件中添加以下内容: server { listen 80; server_name your-domain.com; location / { proxy_pass http://localhost:808; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 8. 配置SSL 如果需要使用HTTPS协议,可以在Nginx配置文件中添加SSL证书和私钥,例如: server { listen 443 ssl; server_name your-domain.com; ssl_certificate /path/to/your-domain.crt; ssl_certificate_key /path/to/your-domain.key; location / { proxy_pass http://localhost:808; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 以上就是将Spring Boot项目部署到服务器上的步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值