springboot上传下载文件(1)(项目和文件资源放在同一个服务器上)

简介: springboot上传下载文件(1)(项目和文件资源放在同一个服务器上)

在单机时代,项目和文件资源放在同一个服务器上

优点:这样做比较便利,项目直接引用就行,实现起来也简单,无需任何复杂技术,保存数据库记录和访问起来也很方便。

缺点:如果只是小项目使用一般也不会有什么问题,但是当项目扩展,文件资源越来越多的话就会存在弊端。一方面,文件和代码耦合在一起,文件越多存放越混乱;另一方面,如果流量比较大,静态文件访问会占据一定的资源,影响正常业务进行,不利于网站快速发展。


前提条件:项目和文件服务器(nginx)需一起部署到本地(win10)或者一起部署到服务器上(linux)

1、依赖

没有特别额外要添加的依赖

2、配置

##单个文件最大KB/MB
#spring-boot-starter-parent2.0.0的设置格式
#spring.servlet.multipart.max-file-size=100MB
#spring-boot-starter-parent1.4.3的设置格式
spring.http.multipart.maxFileSize = 100Mb
####
#设置总上传数据大小
#spring-boot-starter-parent2.0.0的设置格式
#spring.servlet.multipart.max-request-size=200MB
#spring-boot-starter-parent1.4.3的设置格式
spring.http.multipart.maxRequestSize=1000Mb

image.gif

3、接口编写

(1)上传头像:

//上传头像
@PostMapping("/headImg")
public Object uploadHeadimg(@RequestParam("file") MultipartFile file) {
    String username = SecurityContextHolder.getContext().getAuthentication().getName();//获取当前登录用户
    System.out.println( username );
    User user = userService.getUserByUsername(username);
    if (!file.isEmpty()) { //文件不是空文件
        try {
            BufferedOutputStream out = new BufferedOutputStream(
                    //C:\IDEA_mode_project\agriculture\src\main
                    new FileOutputStream(new File(filepath + username + ".jpg")));//保存图片到目录下,建立保存文件的输入流
            out.write(file.getBytes());
            out.flush();
            out.close();
            String filename = filepath + username + ".jpg";
            user.setAvater(filename); //设置头像路径
            userService.saveOrUpdate(user);//修改用户信息
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return new Reponse(false,"上传失败," + e.getMessage());
            //return "上传失败," + e.getMessage();  //文件路径错误
        } catch (IOException e) {
            e.printStackTrace();
            return new Reponse(false,"上传失败," + e.getMessage());
            //return "上传失败," + e.getMessage();  //文件IO错误
        }
        return new Reponse(true,"上传头像成功",user);//返回用户信息
    } else {
        return new Reponse(false,"上传失败,因为文件是空的");
    }
}

image.gif

注意 :try{}是关键代码,其他的是我项目的业务逻辑,不用管

(2)上传文件

@PostMapping("/docUpload")
public Object docUpload(@RequestParam("title") String title,
                        @RequestParam("description") String description,
                        @RequestParam("file") MultipartFile file ) {
    String author = SecurityContextHolder.getContext().getAuthentication().getName();//获取当前登录用户
    User user = userService.getUserByUsername( author );
    //System.out.println( user );
    String fileName = file.getOriginalFilename().toString();//获取文件名
    //System.out.println( fileName );
    if(fileName.indexOf('?')!=fileName.length()-1)
        fileName=title+fileName.substring(fileName.lastIndexOf("."));
    final SimpleDateFormat sDateFormate = new SimpleDateFormat("yyyymmddHHmmss");  //设置时间格式
    String nowTimeStr = sDateFormate.format(new Date()); // 当前时间
    fileName=fileName.substring(0,fileName.indexOf("."))+nowTimeStr+fileName.substring(fileName.lastIndexOf("."));
    Doc doc = new Doc();
    if (!file.isEmpty()) {
        try {
            BufferedOutputStream out = new BufferedOutputStream(
                    new FileOutputStream(new File(filepath + fileName)));//保存图片到目录下,建立保存文件的输入流
            out.write(file.getBytes());
            out.flush();
            out.close();
            String filename = filepath+fileName;
            Long fileSize = file.getSize();
            System.out.println( file.getSize());
            doc.setTitle( title );
            doc.setAvatar( filename );
            doc.setAuthor( author );
            doc.setAuthor_picture(user.getAvater());
            doc.setUptime( new Date() );
            doc.setDescription( description );
            doc.setFileSize( fileSize );
            docService.saveOrUpdateDoc( doc );
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return new Reponse(false,"上传文件失败," + e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            return new Reponse(false,"上传文件失败," + e.getMessage());
        }
        return new Reponse(true,"上传文件成功",doc);//返回文件信息
    }
    else {
        return new Reponse(false,"上传失败,因为文件是空的");
    }
}

image.gif

注意 :try{}是关键代码,其他的是我项目的业务逻辑,不用管

写的比较简单。其实不怎么推荐这样做,弊端太大



相关文章
|
1月前
|
Shell 网络安全 开发工具
服务器已经搭建好的项目如何关联至gitee对应仓库并且将服务器的项目代码推送至gitee-优雅草卓伊凡
服务器已经搭建好的项目如何关联至gitee对应仓库并且将服务器的项目代码推送至gitee-优雅草卓伊凡
178 5
|
3月前
|
监控 Java Linux
Apache NiFi项目的编译与部署于CentOS服务器
总而言之,Apache NiFi的编译和部署虽然涉及多个步骤,但这些操作步骤简明扼要,即使是不太熟悉Java或Maven的用户也能跟随指南完成。通过遵循上述步骤,您将能够在CentOS服务器上成功部署Apache NiFi,为您的数据流处理任务建立一个功能强大的平台。
278 16
|
7月前
|
XML 前端开发 Java
SpringBoot实现文件上传下载功能
本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。
750 0
|
3月前
|
存储 安全 数据管理
服务器违规资源被删,数据定时备份OSS 云存储才是 “救命稻草”
在数字化时代,数据已成为企业与个人的核心资产。然而,服务器违规、硬件故障等问题频发,导致数据丢失、业务中断,甚至造成不可挽回的损失。为保障数据安全与业务连续性,定时备份至关重要。阿里云国际站OSS提供高效、可靠的云存储解决方案,支持自动定时备份,帮助用户轻松应对数据风险。本文详解OSS备份操作步骤与注意事项,助你为数据穿上“防护甲”,实现安全无忧存储。
|
4月前
|
机器学习/深度学习 人工智能 运维
“服务器老是爆?资源老是浪费?试试用 AI 来规划容量!”
“服务器老是爆?资源老是浪费?试试用 AI 来规划容量!”
136 4
|
7月前
|
缓存 人工智能 架构师
释放数据潜力:利用 MCP 资源让大模型读懂你的服务器
MCP(Model Control Protocol)资源系统是将服务器数据暴露给客户端的核心机制,支持文本和二进制两种类型资源。资源通过唯一URI标识,客户端可通过资源列表或模板发现资源,并使用`resources/read`接口读取内容。MCP还支持资源实时更新通知及订阅机制,确保动态数据的及时性。实现时需遵循最佳实践,如清晰命名、设置MIME类型和缓存策略,同时注重安全性,包括访问控制、路径清理和速率限制等。提供的示例代码展示了如何用JavaScript和Python实现资源支持。
882 80
|
5月前
|
C# 图形学 开发者
Unity开发中使用UnityWebRequest从HTTP服务器下载资源。
总之,UnityWebRequest就是游戏开发者手中的万能钓鱼竿,既可以获取文本数据,也能钓上图片资源,甚至是那声音的涟漪。使用UnityWebRequest的时候,你需要精心准备,比如确定URL、配置请求类型和头信息;发起请求;巧妙处理钓获的数据;还需要机智面对网络波澜,处理各种可能出现的错误。按照这样的过程,数据的钓取将会是一次既轻松愉快也效率高效的编程钓鱼之旅。
277 18
|
5月前
|
弹性计算 安全
阿里云服务器镜像,快速迁移项目数据
有时候旧服务器快到期了,想把项目、数据、软件挪到新服务器上,如果全部重新搭建的话,那无疑是耗时又费力。有了镜像迁移,就方便了许多。
495 1
|
8月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现

热门文章

最新文章

下一篇
oss云网关配置