小视频储存方案——FastDFS
FastDFS是分布式文件系统
使用 FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。
Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storage server 没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。
fdfs:
  so-timeout: 1500
  connect-timeout: 600
  #缩略图生成参数
  thumb-image:
    width: 150
    height: 150
  #TrackerList参数,支持多个
  tracker-list: ip:22122
  web-server-url: http://ip:8888/
spring:
  servlet:
    multipart:
      max-file-size: 50MB    #设置单个文件大小
      max-request-size: 500MB   #设置单次请求文件的总大小
配置Bean
   @Bean
    public MultipartConfigElement MultipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
// 单个数据大小
        factory.setMaxFileSize(DataSize.parse("50MB"));// KB,MB
// 总上传数据大小
        factory.setMaxRequestSize(DataSize.parse("500MB"));
        return  factory.createMultipartConfig();
    }
业务:上传本地文件到服务器
视频封面传到图片服务器,视频文件传到视频服务器;讲两份文件的url保存到数据库
@Service
public class SmallVideosService {
    @Reference
    private VideoApi videoApi;
    @Reference
    private UserInfoApi userInfoApi;
    @Autowired
    private OssTemplate ossTemplate;
    @Autowired
    private FastFileStorageClient storageClient;
    @Autowired
    private FdfsWebServer webServer;
    @Autowired
    private RedisTemplate<String,String> redisTemplate;
    /**
     * 发布视频
     */
    //@CacheEvict(value = "videoList",allEntries = true)
    public ResponseEntity saveVideos(MultipartFile videoThumbnail, MultipartFile videoFile) throws IOException {
        //1、封面图上传到阿里云OSS,获取地址
        String picUrl = ossTemplate.upload(videoThumbnail.getOriginalFilename(), videoThumbnail.getInputStream());
        //2、视频上传到fdfs上,获取请求地址
        //获取文件的后缀名
        String filename = videoFile.getOriginalFilename();  //ssss.avi
        String sufix = filename.substring(filename.lastIndexOf(".")+1);
        StorePath storePath = storageClient.uploadFile(videoFile.getInputStream(),
                                    videoFile.getSize(), sufix, null);//文件输入流,文件长度,文件后缀,元数据
        String videoUrl = webServer.getWebServerUrl() + storePath.getFullPath();
        //3、创建Video对象,并设置属性
        Video video = new Video();
        video.setUserId(UserHolder.getUserId());
        video.setPicUrl(picUrl);
        video.setVideoUrl(videoUrl);
        video.setText("我就是我,不一样的烟火");
        //4、调用API完成保存
        videoApi.save(video);
        //5、构造返回值
        return ResponseEntity.ok(null);
    }
}
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号