centos http文件上传服务器 推荐_SpringBoot实现本地存储文件上传及提供HTTP访问服务

笔者计划为大家介绍分布式文件系统,用于存储应用的图片、word、excel、pdf等文件。在开始介绍分布式文件系统之前,为大家介绍一下使用本机存储来存放文件资源。 二者的核心实现过程是一样的:

  • 上传文件,保存文件(本节是本地磁盘)
  • 返回文件HTTP访问服务路径给前端,进行上传之后的效果展示

一、复习

服务端接收上传的目的是提供文件的访问服务,那么对于SpringBoot而言,有哪些可以提供文件访问的静态资源目录呢?

  • classpath:/META-INF/resources/ ,
  • classpath:/static/ ,
  • classpath:/public/ ,
  • classpath:/resources/

这是之前我们为大家介绍的内容,从这里看出这里的静态资源都在classpath下。那么就出现问题:

  • 应用的文件资源不能和项目代码分开存储(你见过往github上传代码,还附带项目文件数据的么?)
  • 项目打包困难,当上传的文件越来越多,项目的打包jar越来越大。
  • 代码与文件数据不能分开存储,就意味着文件数据的备份将变得复杂

二、文件上传目录自定义配置

怎么解决上述问题?别忘记了spring boot 为我们提供了使用spring.resources.static-locations配置自定义静态文件的位置。

web:
  upload-path: D:/data/

spring:
  resources:
    static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${web.upload-path}
  • 配置web.upload-path为与项目代码分离的静态资源路径,即:文件上传保存根路径
  • 配置spring.resources.static-locations,除了带上Spring Boot默认的静态资源路径之外,加上file:${web.upload-path}指向外部的文件资源上传路径。该路径下的静态资源可以直接对外提供HTTP访问服务。

三、文件上传的Controller实现

详情看代码注释

@RestController
public class FileUploadController {

    //绑定文件上传路径到uploadPath
    @Value("${web.upload-path}")
    private String uploadPath;

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/");

    @PostMapping("/upload")
    public String upload(MultipartFile uploadFile,
                         HttpServletRequest request) {

        // 在 uploadPath 文件夹中通过日期对上传的文件归类保存
        // 比如:/2019/06/06/cf13891e-4b95-4000-81eb-b6d70ae44930.png
        String format = sdf.format(new Date());
        File folder = new File(uploadPath + format);
        if (!folder.isDirectory()) {
            folder.mkdirs();
        }

        // 对上传的文件重命名,避免文件重名
        String oldName = uploadFile.getOriginalFilename();
        String newName = UUID.randomUUID().toString()
                + oldName.substring(oldName.lastIndexOf("."), oldName.length());
        try {
            // 文件保存
            uploadFile.transferTo(new File(folder, newName));

            // 返回上传文件的访问路径
            String filePath = request.getScheme() + "://" + request.getServerName()
                    + ":" + request.getServerPort()  + format + newName;
            return filePath;
        } catch (IOException e) {
            throw new CustomException(CustomExceptionType.SYSTEM_ERROR);
        }

    }
}

四、写一个模拟的文件上传页面,进行测试

把该upload.html文件放到classpath:public目录下,对外提供访问。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="uploadFile" value="请选择上传文件">
    <input type="submit" value="保存">
</form>
</body>
</html>

访问测试、点击“选择文件”,之后保存

v2-5fa8c82031cd5a87475e0c3c92f698a7_b.jpg

文件被保存到服务端的web.upload-path指定的资源目录下

v2-582aee442c1c3cb2bcfe69c2f9e63bc7_b.jpg

浏览器端响应结果如下,返回一个文件HTTP访问路径:

v2-f0469b5e72a1afa12f9ab6b568ef2617_b.jpg

使用该HTTP访问路径,在浏览器端访问效果如下。证明我们的文件已经成功上传到服务端,以后需要访问该图片就通过这个HTTP URL就可以了。

v2-4f466584262944e36409a73b83ba921f_b.jpg

欢迎关注我的博客,里面有很多精品合集

  • 本文转载注明出处(必须带连接,不能只转文字):字母哥博客。

觉得对您有帮助的话,帮我点赞、分享!您的支持是我不竭的创作动力! 。另外,笔者最近一段时间输出了如下的精品内容,期待您的关注。

  • 《手摸手教你学Spring Boot2.0》
  • 《Spring Security-JWT-OAuth2一本通》
  • 《实战前后端分离RBAC权限管理系统》
  • 《实战SpringCloud微服务从青铜到王者》
  • 《VUE深入浅出系列》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 本地文件上传CentOS服务器可以通过以下几个步骤完成: 1. 连接到CentOS服务器:使用SSH协议连接到服务器,可以使用工具如PuTTY等,在命令行中输入服务器IP地址、用户名和密码进行连接。 2. 创建一个用来存放上传文件的目录:可以在服务器上任意位置创建一个目录,例如在用户家目录下创建一个名为"uploads"的目录。 3. 在本地电脑上准备要上传的文件:在本地电脑上准备好需要上传到服务器文件,确保文件处于可访问的位置。 4. 使用SCP命令进行上传:在本地电脑的命令行中使用SCP命令将文件上传服务器。命令的格式为:`scp local_file remote_username@remote_ip:remote_folder`。例如,如果要上传本地桌面上的一个名为"myfile.txt"的文件服务器上的"uploads"目录,可以运行命令:`scp ~/Desktop/myfile.txt username@server_ip:~/uploads`。 5. 输入服务器密码确认操作:SCP命令会要求输入服务器密码,输入后按回车确认。 6. 文件上传成功:上传过程完成后,可以在服务器上指定的目录下找到刚刚上传的文件。 值得注意的是,服务器上需要安装有SSH服务,并且CentOS服务器的防火墙需要允许SCP连接和上传操作。以上步骤适用于在CentOS服务器上进行文件上传,可以根据具体需要进行调整和改进。 ### 回答2: 要在CentOS服务器上上传本地文件,可以使用以下几种方法: 1. 使用命令行工具scp。首先,打开终端窗口,然后使用以下命令: ```shell scp /本地文件路径 用户名@服务器IP地址:/目标路径 ``` 其中,/本地文件路径是待上传的本地文件路径,用户名是服务器登录账号的用户名,服务器IP地址是CentOS服务器的IP地址,/目标路径是在服务器上存放文件的目标路径。 2. 使用FTP客户端软件。可以在本地计算机上安装一个FTP客户端软件,比如FileZilla。然后,打开软件,输入服务器的IP地址、用户名和密码进行连接。在连接成功后,可以将本地文件拖拽到服务器窗口中,并选择目标路径进行上传。 3. 使用Web文件管理器。如果CentOS服务器上已经安装了Web文件管理器,可以通过服务器的域名或IP地址访问该管理器。登录后,可以点击上传按钮或拖拽本地文件到浏览器窗口中进行上传。 无论使用哪种方法,上传完成后可以通过相应的命令行或文件管理器确认文件已经成功上传到CentOS服务器上。 ### 回答3: 要在CentOS服务器上上传本地文件,可以通过以下步骤完成: 1. 首先,确保已经连接到CentOS服务器的终端或使用SSH客户端访问服务器。 2. 在本地计算机中,找到要上传到服务器文件。 3. 使用以下命令将文件上传CentOS服务器: scp /本地文件路径 用户名@服务器IP地址:/服务器文件的目标路径 例如,如果要上传一个名为example.txt的文件到 /home/username 目录下,命令示例如下: scp /path/to/example.txt username@server-ip-address:/home/username 输入服务器的密码后,文件将开始上传。 4. 等待上传完成后,可以在服务器上的目标路径中找到已上传的文件。 以上是使用scp命令进行文件上传的基本步骤。你也可以使用其他工具,如FileZilla等FTP客户端软件,来实现类似的文件上传操作。 注意:在执行上传操作时,确保已经对服务器的目标路径具有适当的写入权限,以便文件可以成功上传。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值