学成在线--day08 课程图片管理 分布式文件系统
程序员文章站
2022-06-13 12:42:04
...
学成在线 第8天 讲义-课程图片管理 分布式文件系 统
这个文件系统得安装在这个学成在线得系统中并没有讲解,基本上都是安装文档安装,得也是比较老得套路,提前写号得代码复制一下,基本跑通是没有任何问题得,个人觉得这个项目得可读性还有可练习性非常差,非常不建议新手学这个项目,完全浪费时间我,我个人看看后面还有什么坑没,尽量都把他显示出来,总之看这个学成在线得视频,看到后面越看越水,基本就是把提前写号得代码复制一下,坑还是挺多得,不如乐友商城和传智健康得项目做者实在
这个是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();
}
}
接着就是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();
}
成功通过
这个步骤流程基本上也么有,配置本地得Nginx得时候需要把host文件改成映射成本机得
配置本地Nginx
接下来就是创建微服务工程和之前得一样创建工程,加入pom依赖引入坐标,加配置文件,这个就不在详细赘述了,这个视频中得这个部分竟然没有写,也是直接复制粘贴得,看到这里,剩下得部分我估计大部分也是复制粘贴了,越来越没有看下去得欲望了
Api接口
关于文件上传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);
}
}
因为要保存图片所有保存得时候,一定要把课程微服务也要启动起来,不然会报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);
}
这个教程道后面是越来越水了,基本上都是复制讲义里面已经有得代码,不过本人还是想看一下他这个项目怎么在线上部署得,这个也是微服务部署的一个过程。坚持道最后!!
上一篇: php上传文件代码
下一篇: 关于手机浏览的网站解决办法