博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java的新项目学成在线笔记-day8(二)
阅读量:5902 次
发布时间:2019-06-19

本文共 6259 字,大约阅读时间需要 20 分钟。

1.1.3 API接口 1.1.3.1模型类

系统的文件信息(图片、文档等小文件的信息)在mongodb中存储,下边是文件信息的模型类。
1) 模型如下:
[mw_shl_code=applescript,true]
file‐size‐threshold: 0

上传文件的临时目录

location:

最大支持文件大小

max‐file‐size: 1MB   # 最大支持请求大小
max‐request‐size: 30MB xuecheng:   fastdfs:     connect_timeout_in_seconds: 5     network_timeout_in_seconds: 30     charset: UTF‐8     tracker_servers: 192.168.101.64:22122@Data @ToString @Document(collection = "filesystem") public class FileSystem {       @Id     private String fileId;     //文件请求路径    private String filePath;     //文件大小    private long fileSize;    //文件名称     private String fileName;   //文件类型     private String fileType;     //图片宽度     private int fileWidth;     //图片高度     private int fileHeight;     //用户id,用于授权暂时不用     private String userId;     //业务key    private String businesskey;    //业务标签     private String filetag;    //文件元信息     private Map metadata;  }[/mw_shl_code]

说明:

fileId:fastDFS返回的文件ID。 filePath:请求fastDFS浏览文件URL。 filetag:文件标签,由于文件系统服务是公共服务,文件系统服务会为使用文件系统服务的子系统分配文件标签, 用于标识此文件来自哪个系统。
businesskey:文件系统服务为其它子系统提供的一个业务标识字段,各子系统根据自己的需求去使用,比如:课 程管理会在此字段中存储课程id用于标识该图片属于哪个课程。 metadata:文件相关的元信息。
2) collection 在mongodb创建数据库xc_fs(文件系统数据库),并创建集合 filesystem。

Java的新项目学成在线笔记-day8(二)

1.1.3.2 Api接口
在api工程下创建com.xuecheng.api.filesystem包,

[mw_shl_code=applescript,true] public interface FileSystemControllerApi {         /**      * 上传文件      * @param multipartFile 文件      * @param filetag 文件标签      * @param businesskey 业务key      * @param metedata 元信息,json格式      * @return      */     public UploadFileResult upload(MultipartFile multipartFile,                     String filetag,                     String businesskey,                     String metadata); }[/mw_shl_code]

1.1.2.3 Dao

将文件信息存入数据库,主要存储文件系统中的文件路径。

[mw_shl_code=applescript,true]public interface FileSystemRepository extends MongoRepository
{ }[/mw_shl_code]1.1.2.4 Service [mw_shl_code=applescript,true]@Service public class FileSystemService { private static final Logger LOGGER = LoggerFactory.getLogger(FileSystemService.class); @Value("${xuecheng.fastdfs.tracker_servers}") String tracker_servers; @Value("${xuecheng.fastdfs.connect_timeout_in_seconds}") int connect_timeout_in_seconds; @Value("${xuecheng.fastdfs.network_timeout_in_seconds}") int network_timeout_in_seconds; @Value("${xuecheng.fastdfs.charset}") String charset; @Autowired FileSystemRepository fileSystemRepository; //加载fdfs的配置 private void initFdfsConfig(){ try { ClientGlobal.initByTrackers(tracker_servers); ClientGlobal.setG_connect_timeout(connect_timeout_in_seconds); ClientGlobal.setG_network_timeout(network_timeout_in_seconds); ClientGlobal.setG_charset(charset); } catch (Exception e) { e.printStackTrace(); //初始化文件系统出错 ExceptionCast.cast(FileSystemCode.FS_INITFDFSERROR); } } //上传文件 public UploadFileResult upload(MultipartFile file, String filetag, String businesskey, String metadata){ if(file == null){ ExceptionCast.cast(FileSystemCode.FS_UPLOADFILE_FILEISNULL); } //上传文件到fdfs[/mw_shl_code][mw_shl_code=applescript,true]String fileId = fdfs_upload(file); //创建文件信息对象 FileSystem fileSystem = new FileSystem(); //文件id fileSystem.setFileId(fileId); //文件在文件系统中的路径 fileSystem.setFilePath(fileId); //业务标识 fileSystem.setBusinesskey(businesskey); //标签 fileSystem.setFiletag(filetag); //元数据 if(StringUtils.isNotEmpty(metadata)){ try { Map map = JSON.parseObject(metadata, Map.class); fileSystem.setMetadata(map); } catch (Exception e) { e.printStackTrace(); } } //名称 fileSystem.setFileName(file.getOriginalFilename()); //大小 fileSystem.setFileSize(file.getSize()); //文件类型 fileSystem.setFileType(file.getContentType()); fileSystemRepository.save(fileSystem); return new UploadFileResult(CommonCode.SUCCESS,fileSystem); } //上传文件到fdfs,返回文件id public String fdfs_upload(MultipartFile file) { try { //加载fdfs的配置 initFdfsConfig(); //创建tracker client TrackerClient trackerClient = new TrackerClient(); //获取trackerServer TrackerServer trackerServer = trackerClient.getConnection(); //获取storage StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer); //创建storage client StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage); //上传文件 //文件字节 byte[] bytes = file.getBytes(); //文件原始名称 String originalFilename = file.getOriginalFilename(); //文件扩展名 String extName = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); //文件id String file1 = storageClient1.upload_file1(bytes, extName, null);[/mw_shl_code][mw_shl_code=applescript,true] return file1; } catch (Exception e) { e.printStackTrace(); } return null; } }[/mw_shl_code]1.1.2.5 Controller [mw_shl_code=applescript,true]@RestController @RequestMapping("/filesystem") public class FileSystemController implements FileSystemControllerApi { @Autowired FileSystemService fileSystemService; @Override @PostMapping("/upload") public UploadFileResult upload(@RequestParam("file") MultipartFile file, @RequestParam(value = "filetag", required = true) String filetag, @RequestParam(value = "businesskey", required = false) String businesskey, @RequestParam(value = "metedata", required = false) String metadata) { return fileSystemService.upload(file,filetag,businesskey,metadata); } }[/mw_shl_code]

1.1.2.6 测试

使用swagger-ui或postman进行测试。 下图是使用swagger-ui进行测试的界面:
Java的新项目学成在线笔记-day8(二)

转载于:https://blog.51cto.com/13517854/2374017

你可能感兴趣的文章
LightOJ 1274 Beating the Dataset(期望)
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
多线程一个错误的例子
查看>>
默认网关及route print
查看>>
Servlet如何处理一个请求?
查看>>
Linux Daily2
查看>>
使用Jquery+CSS如何创建流动导航菜单-Fluid Navigation
查看>>
Office文档出错的几种原因与解决方法
查看>>
【实验报告】实验二:DHCP基本实验
查看>>
气质的培养(哈佛管理世界)
查看>>
Can't get Kerberos realm
查看>>
正则表达式 学习笔记1.1
查看>>
通过案例学调优之--AWR BaseLine管理
查看>>
如何使用MySQL提升权限
查看>>
keepalived 原理,安装,配置
查看>>
乐在其中设计模式(C#) - 单例模式(Singleton Pattern)
查看>>
Tensorflow官方语音识别入门教程 | 附Google新语音指令数据集
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
Windows Home Server 简体中文版安装和配置体验 - 海量图鉴
查看>>
GitHub 版本控制 项目托管 00 总体框架
查看>>