JAVA文件上传到服务器以及从服务器下载

1. 文件上传

通用工具类

/**
     * 
     * @param stream 文件输入流
     * @param path 保存的文件地址
     * @param savefile 文件名
     * @throws IOException
     */
    public static void SaveFileFromInputStream(InputStream stream, String path, String savefile) throws IOException {
        FileOutputStream fs = new FileOutputStream(path + savefile);
        byte[] buffer = new byte[1024 * 1024];
        int bytesum = 0;
        int byteread = 0;
        while ((byteread = stream.read(buffer)) != -1) {
            bytesum += byteread;
            fs.write(buffer, 0, byteread);
            fs.flush();
        }
        fs.close();
        stream.close();
    }

测试方法

/**
     * 上传附件
     */
    public Integer uploadFile(MultipartFile file, HttpServletRequest request) {
        try {
            //获取原始文件名
            String fileName = file.getOriginalFilename();
            //截取文件后缀
            String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
            //文件名
            fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + suffix;
            //保存到服务器的路径
            String path = request.getSession().getServletContext().getRealPath("/") + "WEB-INF\\classes\\static\\approval\\";
            //文件上传到服务器
            UploadImgUtils.SaveFileFromInputStream(file.getInputStream(), path, fileName);
        } catch (IOException e) {
            log.error(e);
        }
    }

Controller层

这里测试是上传图片,判断文件是否是图片格式。

//判断图片结尾的正则表达式
public final static String imageFormat = "^.+(.JPEG|.jpeg|.JPG|.jpg|.GIF|.gif|.BMP|.bmp|.PNG|.png)$";
/**
     * 上传图片
     */
    @PostMapping("/uploadImg")
    public Object uploadImg(MultipartFile file, HttpServletRequest req) {
            if(file.getOriginalFilename().matches(imageFormat)){
                return sysUserService.uploadImg(file, req);
            }else {
                return Responses.error("只能上传图片文件,请重新选择");
            }
    }

2.文件下载

通用工具类

/**
     * 
     * @param res
     * @param fileName 文件名称
     * @param filePath 文件地址
     */
    public static void download(HttpServletResponse res, String fileName, String filePath) {
        res.setHeader("content-type", "application/octet-stream");
        res.setContentType("application/octet-stream");
        res.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        OutputStream os = null;
        try {
            os = res.getOutputStream();
            bis = new BufferedInputStream(new FileInputStream(new File(filePath
                    + fileName)));
            int i = bis.read(buff);
            while (i != -1) {
                os.write(buff, 0, buff.length);
                os.flush();
                i = bis.read(buff);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bis != null) {
                try {
                    bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println("success");
    }

Controller层

@PostMapping("/downloadTemplate")
    public Object downloadTemplate(HttpServletResponse res){
        try {
       		 //文件名称
            String fileName = "importExcelFile.xlsx";
            //文件地址
            String filePath = "F:\\test";
            UploadImgUtils.download(res,fileName,filePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Responses.success("");
    }

3.文件删除

通用工具类

/**
     * 删除文件
     * @param filePath 文件完整路径(包括文件名称)
     * @return
     */
    public static boolean deleteFile(String filePath){
        boolean delete_flag = false;
        File file = new File(filePath);
        if (file.exists() && file.isFile() && file.delete()){
            delete_flag = true;
        }
        else{
            delete_flag = false;
        }
        return delete_flag;
    }

Controller层

/**
     * 删除
     * @param id
     * @return
     */
    public Object deleteApprovalFile(Integer id) {
        if (id != null) {
            ApprovalFile approvalFile = approvalFileMapper.selectByPrimaryKey(id);
            //approvalFile.getFilePath() 存储文件地址
            //approvalFile.getFileName() 存储文件名
            //approvalFileMapper.deleteByPrimaryKey(approvalFile.getId()) 删除数据库中数据
            if (deleteFile(approvalFile.getFilePath() + approvalFile.getFileName()) && approvalFileMapper.deleteByPrimaryKey(approvalFile.getId()) > 0) {
                return Responses.success("删除原文件成功");
            }
        }
        return Responses.error("删除原文件失败");
    }

数据库中存储

附录

通常项目中获取项目地址的方法

 String path = request.getSession().getServletContext().getRealPath("/") + "WEB-INF\\classes\\static\\images\\";

项目中获取服务器ip地址以及端口号、以及项目中的文件展示
主要用于图片的显示

		//request.getScheme() 获取 http
		//InetAddress.getLocalHost().getHostAddress()   获取ip地址
		//request.getServerPort() 获取端口号
		//"\\" + "images\\" 获取resources\static\images
	    String path = request.getScheme() + "://" + InetAddress.getLocalHost().getHostAddress() + ":" + request.getServerPort() + "\\" + "images\\";
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值