动手做一个文件服务器【简易版本 亦可作为私人网盘】

当我们在做项目时难免都要上传附件,这时我们会用到市面上开源的文件服务器,例如FastDFSServUHDFS等文件服务器,我想我可不可以做一个简易版本的小型文件服务器系统呢?

一,文件服务器的主要工作内容是什么?

  1. 向外界提供上传附件的接口
  2. 向外界提供附件在线预览地址的接口
  3. 服务器本身在硬盘上对所有的附件作统一管理

二,文件服务器的原理是什么?

文件服务器作为服务端,自然要接收客户端发送来的文件并将文件写入本地磁盘,然后做一些处理可以预览附件,那么这一句话就够用了,下面开始动手写一个简易的文件服务器。

三,动手写文件服务器

写这个服务器没有用到数据库,全都是文件流的操作,仅此而已!
在这里插入图片描述
在这里插入图片描述

1,服务端接收上传文件的接口

写对外开放的为客户端上传附件的接口,参数为MultipartFile对象,客户端只需要直接将文件MultipartFile参数传过来即可。
其中文件上传到了Tomcat/webapps/中的一个文件夹,同时Tomcat要开启状态,因为拼接上域名和文件路径以及文件名就可以直接下载了。

@Controller
@RequestMapping("/rest")
public class CreateFileController {
   
   
    //硬盘文件地址(存储文件地址)
//    private static final String dirPath="D:\\suibian\\test\\";
    private static final String dirPath="/usr/local/share/apache-tomcat-8.5.40/webapps/files/";
    //Tomcat域名,拼接上文件名可直接下载
    private static final String tomcatUrl="https://www.tiger2.cn/files/";

    //客户端向本服务端上传文件的开放接口
    @PostMapping("createFile")
    @ResponseBody
    public Map<String, Object> createFile(MultipartFile uploadFile, String uploader) {
   
   
        String message = "";
        boolean success = true;
        //构建新的文件名并进行存储,存储到云服务的文件夹中
        String originalFilename = uploadFile.getOriginalFilename();
        String suffix=originalFilename.substring(originalFilename.lastIndexOf("."));
        long time=new Date().getTime();
        String newFileName=originalFilename.substring(0,originalFilename.lastIndexOf("."))+String.valueOf(time)+suffix;
        try {
   
   
        //FileUtils.copyInputStreamToFile是commons-io包下的方法,可以直接将输入流转为一个新的文件(前提是指定好路径和要生成的文件名)
            FileUtils.copyInputStreamToFile(uploadFile.getInputStream(),
                    new File(dirPath + newFileName));
        } catch (Exception e) {
   
   
            message = e.getMessage();
            success = false;
        }
        Map<String, Object> result = new HashMap<>();
        result.put("message", message);
        result.put("success", success)<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值