欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学成在线--day08 课程图片管理 分布式文件系统

程序员文章站 2022-06-13 12:42:04
...

学成在线 第8天 讲义-课程图片管理 分布式文件系 统
 学成在线--day08 课程图片管理 分布式文件系统

学成在线--day08 课程图片管理 分布式文件系统

学成在线--day08 课程图片管理 分布式文件系统

这个文件系统得安装在这个学成在线得系统中并没有讲解,基本上都是安装文档安装,得也是比较老得套路,提前写号得代码复制一下,基本跑通是没有任何问题得,个人觉得这个项目得可读性还有可练习性非常差,非常不建议新手学这个项目,完全浪费时间我,我个人看看后面还有什么坑没,尽量都把他显示出来,总之看这个学成在线得视频,看到后面越看越水,基本就是把提前写号得代码复制一下,坑还是挺多得,不如乐友商城和传智健康得项目做者实在

这个是fastDFS得文件上传

可以看道上传成功

    @Test
    public void testUpload(){

        try {
            //加载fastdfs-client.properties配置文件
            ClientGlobal.initByProperties("config/fastdfs-client.properties");
            //定义TrackerClient,用于请求TrackerServer
            TrackerClient trackerClient = new TrackerClient();
            //连接tracker
            TrackerServer trackerServer = trackerClient.getConnection();
            //获取Stroage
            StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
            //创建stroageClient
            StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage);
            //向stroage服务器上传文件
            //本地文件的路径
            String filePath = "d:/a.png";
            //上传成功后拿到文件Id
            String fileId = storageClient1.upload_file1(filePath, "png", null);
            System.out.println(fileId);


        } catch (Exception e) {
            e.printStackTrace();
        }

    }

 

学成在线--day08 课程图片管理 分布式文件系统

接着就是FastDFS得文件得下载,这里千万不要放到C盘,文件权限不够,建议放到D盘

 //下载文件
    @Test
    public void testDownload(){
        try {
            //加载fastdfs-client.properties配置文件
            ClientGlobal.initByProperties("config/fastdfs-client.properties");
            //定义TrackerClient,用于请求TrackerServer
            TrackerClient trackerClient = new TrackerClient();
            //连接tracker
            TrackerServer trackerServer = trackerClient.getConnection();
            //获取Stroage
            StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
            //创建stroageClient
            StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage);
            //下载文件
            //文件id
            String fileId = "group1/M00/00/01/wKhlQVuhU3eADb4pAAAawU0ID2Q159.png";
            byte[] bytes = storageClient1.download_file1(fileId);
            //使用输出流保存文件
            FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/logo.png"));
            fileOutputStream.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        }

 成功通过

学成在线--day08 课程图片管理 分布式文件系统

学成在线--day08 课程图片管理 分布式文件系统

学成在线--day08 课程图片管理 分布式文件系统 

这个步骤流程基本上也么有,配置本地得Nginx得时候需要把host文件改成映射成本机得

配置本地Nginx

学成在线--day08 课程图片管理 分布式文件系统

学成在线--day08 课程图片管理 分布式文件系统 

接下来就是创建微服务工程和之前得一样创建工程,加入pom依赖引入坐标,加配置文件,这个就不在详细赘述了,这个视频中得这个部分竟然没有写,也是直接复制粘贴得,看到这里,剩下得部分我估计大部分也是复制粘贴了,越来越没有看下去得欲望了

学成在线--day08 课程图片管理 分布式文件系统

Api接口

学成在线--day08 课程图片管理 分布式文件系统

关于文件上传Service

 //上传文件
    public UploadFileResult upload( MultipartFile multipartFile,
                                   String filetag,
                                   String businesskey,
                                   String metadata){
        if(multipartFile ==null){
            ExceptionCast.cast(FileSystemCode.FS_UPLOADFILE_FILEISNULL);
        }
        //第一步:将文件上传到fastDFS中,得到一个文件id
        String fileId = fdfs_upload(multipartFile);
        if(StringUtils.isEmpty(fileId)){
            ExceptionCast.cast(FileSystemCode.FS_UPLOADFILE_SERVERFAIL);
        }
        //第二步:将文件id及其它文件信息存储到mongodb中。
        FileSystem fileSystem = new FileSystem();
        fileSystem.setFileId(fileId);
        fileSystem.setFilePath(fileId);
        fileSystem.setFiletag(filetag);
        fileSystem.setBusinesskey(businesskey);
        fileSystem.setFileName(multipartFile.getOriginalFilename());
        fileSystem.setFileType(multipartFile.getContentType());
        if(StringUtils.isNotEmpty(metadata)){
            try {
                Map map = JSON.parseObject(metadata, Map.class);
                fileSystem.setMetadata(map);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        fileSystemRepository.save(fileSystem);
        return new UploadFileResult(CommonCode.SUCCESS,fileSystem);
    }

    //上传文件到fastDFS

    /**
     *
     * @param multipartFile 文件
     * @return 文件id
     */
    private String fdfs_upload(MultipartFile multipartFile){
         //初始化fastDFS的环境
         initFdfsConfig();
         //创建trackerClient
        TrackerClient trackerClient = new TrackerClient();
        try {
            TrackerServer trackerServer = trackerClient.getConnection();
            //得到storage服务器

            StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
            //创建storageClient来上传文件
            StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage);
            //上传文件
            //得到文件字节
            byte[] bytes = multipartFile.getBytes();
            //得到文件的原始名称
            String originalFilename = multipartFile.getOriginalFilename();
            //得到文件扩展名
            String ext = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
            String fileId = storageClient1.upload_file1(bytes, ext, null);
            return fileId;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //初始化fastDFS环境
    private void initFdfsConfig(){
        //初始化tracker服务地址(多个tracker中间以半角逗号分隔)
        try {
            ClientGlobal.initByTrackers(tracker_servers);
            ClientGlobal.setG_charset(charset);
            ClientGlobal.setG_network_timeout(network_timeout_in_seconds);
            ClientGlobal.setG_connect_timeout(connect_timeout_in_seconds);
        } catch (Exception e) {
            e.printStackTrace();
            //抛出异常
            ExceptionCast.cast(FileSystemCode.FS_INITFDFSERROR);
        }
    }

 学成在线--day08 课程图片管理 分布式文件系统

学成在线--day08 课程图片管理 分布式文件系统

学成在线--day08 课程图片管理 分布式文件系统

学成在线--day08 课程图片管理 分布式文件系统

因为要保存图片所有保存得时候,一定要把课程微服务也要启动起来,不然会报504网关错误

 //向课程管理数据添加课程与图片的关联信息
    @Transactional
    public ResponseResult addCoursePic(String courseId, String pic) {
        //课程图片信息
        CoursePic coursePic = null;
        //查询课程图片
        Optional<CoursePic> picOptional = coursePicRepository.findById(courseId);
        if(picOptional.isPresent()){
            coursePic = picOptional.get();
        }
        if(coursePic == null){
            coursePic  = new CoursePic();
        }
        coursePic.setPic(pic);
        coursePic.setCourseid(courseId);
        coursePicRepository.save(coursePic);
        return new ResponseResult(CommonCode.SUCCESS);
    }   
 //查询课程图片
    public CoursePic findCoursePic(String courseId) {
        //查询课程图片
        Optional<CoursePic> picOptional = coursePicRepository.findById(courseId);
        if(picOptional.isPresent()){
            CoursePic coursePic = picOptional.get();
            return coursePic;
        }
        return null;
    }

    //删除课程图片
    @Transactional
    public ResponseResult deleteCoursePic(String courseId) {
        //执行删除
        long result = coursePicRepository.deleteByCourseid(courseId);
        if(result>0){
            return new ResponseResult(CommonCode.SUCCESS);
        }
        return new ResponseResult(CommonCode.FAIL);
    }

学成在线--day08 课程图片管理 分布式文件系统 

学成在线--day08 课程图片管理 分布式文件系统

学成在线--day08 课程图片管理 分布式文件系统 

 学成在线--day08 课程图片管理 分布式文件系统

这个教程道后面是越来越水了,基本上都是复制讲义里面已经有得代码,不过本人还是想看一下他这个项目怎么在线上部署得,这个也是微服务部署的一个过程。坚持道最后!!

相关标签: Java java jdk