Java实现文件上传的方法总结

 更新时间:2023年04月11日 15:26:26   作者:Recently祝祝  
这篇文章主要为大家介绍了三种Java实现文件上传的方法,文中的示例代码讲解详细,对我们的学习或工作有一定的借鉴价值,感兴趣的可以了解一下

1.文件上传接收文件接口

Controller成通过post上传方式定义接口,上传文件通常使用post的上传方式,get用于获取数据、文件。 单个入参可以使用@RequestParam标注,不用封装到类里边在使用@RepuestBody映射

    @PostMapping(value = "/uploadFile")
    @ApiOperation(value = "文件上传", notes = "文件上传")
    public Result uploadFile(@RequestParam (name = "file") MultipartFile file) throws Exception {
        String url = fileService.uploadFile(file);
    }

2.接口主要内容部分

2.1获取文件的相关信息

获取文件主要信息的目的是为了保存文件,通常会使用文件信息来作为文件的保存名称,以下是常用的文件信息获取

//获取文件名称
String originalFilename = file.getOriginalFilename();
// 截取上传文件的后缀
 String uploadFileSuffix = originalFilename.substring(originalFilename.indexOf('.') + 1, originalFilename.length());
 //获取文件父目录
  File Parentlocaltion=localFile.getParentFile();
//获取文件绝对目录
  File localFileAbsoluteFile=localFile.getAbsoluteFile();

需要获取项目所在位置,并且把文件保存到项目同一个目录下。可以用以下方式获取

String currentDir = System.getProperty("user.dir");

File(String pathname):使用给定的路径名字符串创建一个文件对象。

File(String parent, String child):使用给定的父目录路径名字符串和子目录名字符串创建一个文件对象。

createNewFile():创建一个新文件。

mkdir():创建一个新目录。

mkdirs():创建一个新目录,如果必要的话,还会递归地创建父目录。

delete():删除文件或目录。

2.2首先需要知道 JAVA根据file的路径创建文件夹

下面的代码将创建一个文件夹,如果文件夹不存在。

  • mkdirs() 方法将递归地创建所有必需的父文件夹。
  • 如果您只需要创建直接的父文件夹,可以使用 mkdir() 方法。
String folderPath = "D:\\uploadFiles\\report\\20230213\\";
File folder = new File(folderPath);
if (!folder.exists()) {
    folder.mkdirs();
}

2.3文件保存到本地:方法一

使用此方法保存必须要绝对路径且文件夹必须已存在,否则报错,所以一般会使用mkdirs,判断文件是否存在后创建文件夹

 public String uploadFile(MultipartFile file) throws Exception {
		File file = new File(fileName);
	    try {
	        //使用此方法保存必须要绝对路径且文件夹必须已存在,否则报错
	       String fileUrl = "D:\\uploadFiles\\report\\" + fileAdd + File.separator + System.currentTimeMillis() + "." + uploadFileSuffix;
            File localFile = new File(fileUrl);
            File Parentlocaltion=localFile.getParentFile();

            if (!Parentlocaltion.exists()) { //判断文件父目录是否存在
                Parentlocaltion.mkdirs();
            }
            //FileUtils.copyInputStreamToFile(file.getInputStream(), localFile);
            file.transferTo(localFile);
	    } catch (IOException e) {
	        e.printStackTrace();
	        return dealResultMap(false, "上传失败");
	    }*/
	    return dealResultMap(true, "上传成功");
 }

注意:两个文件对象,分别表示源文件和目标文件。然后,我们创建了两个文件通道,并使用 transferTo 方法将源文件通道中的数据传输到目标文件通道中。

2.4文件保存到本地:方法二

这个方式就是很普通的流写入方式,通过文件流读取文件后,写入本地磁盘

 public String uploadFile(MultipartFile file) throws Exception {
    String fileName = file.getOriginalFilename();
    try {
        //获取文件字节数组
        byte [] bytes = file.getBytes();
        //文件存储路径(/fileupload1/ 这样会在根目录下创建问价夹)
        File pfile = new File("/fileupload1/");
        //判断文件夹是否存在
        if(!pfile.exists()){
            //不存在时,创建文件夹
            pfile.mkdirs();
        }
        //创建文件
        File file = new File(pfile, fileName);
        //写入指定文件夹
        OutputStream out = new FileOutputStream(file);
        out.write(bytes);
    } catch (IOException e) {
        e.printStackTrace();
        return dealResultMap(false, "上传失败");
    }
    return dealResultMap(true, "上传成功");
}

3.postman接口调用

这种调用方式仅限于只有file一个上传文件,入参只是file。项目中如果需要多次上传文件可以进行多次接口调用。

到此这篇关于Java实现文件上传的方法总结的文章就介绍到这了,更多相关Java文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • solr 配置中文分析器/定义业务域/配置DataImport功能方法(测试用)

    solr 配置中文分析器/定义业务域/配置DataImport功能方法(测试用)

    下面小编就为大家带来一篇solr 配置中文分析器/定义业务域/配置DataImport功能方法(测试用)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 理解Java的序列化与反序列化

    理解Java的序列化与反序列化

    这篇文章主要为大家详细介绍了Java的序列化与反序列化,序列化是一种对象持久化的手段。普遍应用在网络传输、RMI等场景中。本文通过分析ArrayList的序列化来介绍Java序列化的相关内容,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 一篇文章教你用Java使用JVM工具检测问题

    一篇文章教你用Java使用JVM工具检测问题

    这篇文章主要介绍了深入理解Java使用JVM工具检测问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-09-09
  • Java优先队列 priority queue

    Java优先队列 priority queue

    本文主要介绍了Java优先队列 priority queue,优先队列是一种特殊的数据结构队列中每一个元素都被分配到一个优先权值,出队顺序按照优先权值来划分。一般有两种出队顺序高优先权出队或低优先权出队,想了解具体内容的小伙伴可以参考下文内容,希望对你有所帮助
    2021-12-12
  • springsecurity第三方授权认证的项目实践

    springsecurity第三方授权认证的项目实践

    Spring security 是一个强大的和高度可定制的身份验证和访问控制框架,本文主要介绍了springsecurity第三方授权认证的项目实践,具有一定的参考价值,感兴趣可以了解一下
    2023-08-08
  • 配置Servlet两种方法以及特点详解

    配置Servlet两种方法以及特点详解

    这篇文章主要介绍了配置Servlet两种方法以及特点详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 分析java并发中的wait notify notifyAll

    分析java并发中的wait notify notifyAll

    一个线程修改一个对象的值,而另一个线程则感知到了变化,然后进行相应的操作,这就是wait()、notify()和notifyAll()方法的本质。本文将详细来介绍它们概念实现以及区别
    2021-06-06
  • MybatisX无法自动生成entity实体类的解决方法

    MybatisX无法自动生成entity实体类的解决方法

    本文主要介绍了MybatisX无法自动生成entity实体类的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 基于Java实现扫码登录的示例代码

    基于Java实现扫码登录的示例代码

    相信大家对二维码都不陌生,生活中到处充斥着扫码登录的场景,如登录网页版微信、支付宝等。本文将利用Java实现一个简易版扫码登录的 Demo,需要的可以参考一下
    2022-04-04
  • Java实现更新顺序表中的指定元素的示例

    Java实现更新顺序表中的指定元素的示例

    本文主要介绍了Java实现更新顺序表中的指定元素的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06

最新评论