网站注册价格福田欧辉校车
news/
2025/10/1 19:11:00/
文章来源:
网站注册价格,福田欧辉校车,安阳空气,上海平台网站建设平台分布式文件系统 SpringBootFastDFSVue.js【四】 八、文件的下载和删除功能8.1.FastDFSClient.java8.2.FileServerController.java8.3.Vue的fast.js8.4.fastdfsimg.vue8.5.效果 九、总结endl 八、文件的下载和删除功能
8.1.FastDFSClient.java
Slf4j
public class FastDFSClie… 分布式文件系统 SpringBootFastDFSVue.js【四】 八、文件的下载和删除功能8.1.FastDFSClient.java8.2.FileServerController.java8.3.Vue的fast.js8.4.fastdfsimg.vue8.5.效果 九、总结endl 八、文件的下载和删除功能
8.1.FastDFSClient.java
Slf4j
public class FastDFSClient {static {//加载fastDFS客户端的配置文件try {ClientGlobal.initByProperties(config/fastdfs-client.properties);log.info(network_timeout {} ms, ClientGlobal.g_network_timeout);log.info(charset {}, ClientGlobal.g_charset);} catch (IOException e) {e.printStackTrace();} catch (MyException e) {e.printStackTrace();}}/*** 上传文件** param file* param fastDFSFile* return* throws IOException*/public static FastDfsFile upload(MultipartFile file, FastDfsFile fastDFSFile) throws IOException {byte[] file_buff null;//把文件转成输入流InputStream inputStream file.getInputStream();if (inputStream ! null) {//获取输入流中可读取的数据大小int len inputStream.available();//创建足够大的缓冲区file_buff new byte[len];//一次性把输入流中的数据全都读入到缓冲区file_buff,那file_buff就要足够大,占用内存也会很大inputStream.read(file_buff);}//关闭输入流inputStream.close();//通过fastDSF的client代码访问tracker和storagetry {//创建tracker的客户端TrackerClient trackerClient new TrackerClient(ClientGlobal.getG_tracker_group());//通过TrackerClient对象获取TrackerServer信息TrackerServer trackerServer trackerClient.getTrackerServer();StorageServer storageServer null;//定义storage的客户端,建立与Storage服务器的连接StorageClient1 storageClient new StorageClient1(trackerServer, storageServer);//文件元信息NameValuePair[] metaList new NameValuePair[1];metaList[0] new NameValuePair(fileName, fastDFSFile.getFileName());//执行上传String fileId storageClient.upload_file1(file_buff, fastDFSFile.getExt(), metaList);log.info(upload success. file id is: {}, fileId);fastDFSFile.setFileId(fileId);fastDFSFile.setFilePath(fileId);fastDFSFile.setFileSize(file.getSize());fastDFSFile.setCreateTime(LocalDateTime.now());fastDFSFile.setUpdateTime(LocalDateTime.now());//通过调用service及dao将文件的路径存储到数据库中//关闭storage客户端storageClient.close();return fastDFSFile;} catch (Exception e) {log.error(上传文件失败, e);e.printStackTrace();return null;}}/*** 删除文件** param file_id* return* throws IOException* throws MyException*/public static Boolean delete(String file_id) throws IOException, MyException {//通过fastDSF的client代码访问tracker和storage//创建tracker的客户端TrackerClient trackerClient new TrackerClient(ClientGlobal.getG_tracker_group());//通过TrackerClient对象获取TrackerServer信息TrackerServer trackerServer trackerClient.getTrackerServer();StorageServer storageServer null;//定义storage的客户端,建立与Storage服务器的连接StorageClient1 storageClient new StorageClient1(trackerServer, storageServer);//查询文件//upload success. file id is: group1/M00/00/00/wKjljWXHAauARHa2AAWwwNOt0hY257.pngString[] splitStr file_id.split(/);String group_name splitStr[0];//group1String remoteFileName ;//M00/00/00/wKjljWXHAauARHa2AAWwwNOt0hY257.pngfor (int i 1; i splitStr.length; i) {remoteFileName splitStr[i];if (i ! splitStr.length - 1) {remoteFileName /;}}log.info(group_name : {}, group_name);log.info(remoteFileName : {}, remoteFileName);FileInfo fileInfo storageClient.query_file_info(group_name, remoteFileName);log.info(fileInfo {}, fileInfo);if (fileInfo null) {log.info(您删除的文件信息不存在请核对后再次删除......);return false;}storageClient.delete_file1(file_id);log.info(删除成功);//关闭storage客户端storageClient.close();return true;}/*** 下载文件** param file_id* throws IOException* throws MyException*/public static byte[] downloadFastFile(String file_id) throws IOException, MyException {//通过fastDSF的client代码访问tracker和storage//创建tracker的客户端TrackerClient trackerClient new TrackerClient(ClientGlobal.getG_tracker_group());//通过TrackerClient对象获取TrackerServer信息TrackerServer trackerServer trackerClient.getTrackerServer();StorageServer storageServer null;//定义storage的客户端,建立与Storage服务器的连接StorageClient1 storageClient new StorageClient1(trackerServer, storageServer);//查询文件//upload success. file id is: group1/M00/00/00/wKjljWXHAauARHa2AAWwwNOt0hY257.pngString[] splitStr file_id.split(/);String group_name splitStr[0];//group1String remoteFileName ;//M00/00/00/wKjljWXHAauARHa2AAWwwNOt0hY257.pngfor (int i 1; i splitStr.length; i) {remoteFileName splitStr[i];if (i ! splitStr.length - 1) {remoteFileName /;}}log.info(group_name : {}, group_name);log.info(remoteFileName : {}, remoteFileName);FileInfo fileInfo storageClient.query_file_info(group_name, remoteFileName);log.info(fileInfo {}, fileInfo);if (fileInfo null) {log.info(您下载的文件信息不存在请核对后再次下载......);return null;}//下载操作,传文件id返回字节流byte[] bytes storageClient.download_file1(file_id);//关闭storage客户端storageClient.close();return bytes;}
}8.2.FileServerController.java
Slf4j
RestController
RequestMapping(/fastDFSFile)
public class FileServerController {Resourceprivate FastDfsFileService fastDfsFileService;Resourceprivate FastDfsFileTypeService fastDfsFileTypeService;PostMapping(/upload)ResponseBodypublic R upload(RequestParam(file) MultipartFile file) throws IOException {//将文件先存储在web服务器上(本机),在调用fastDFS的client将文件上传到 fastDFS服务器FastDfsFile fastDFSFile new FastDfsFile();String contentType file.getContentType();//检验当前文件是否在上述集合中log.info(上传的文件类型为{}, contentType);int count fastDfsFileTypeService.selectByFileType(contentType);if (count 1) {log.info(不支持此文件类型上传 : {}, contentType);return R.error().setCode(208).setMessage(不支持此文件类型上传 : contentType);}log.info(此文件类型为 : {}, contentType);fastDFSFile.setFileType(contentType);//文件原始名称String originalFilename file.getOriginalFilename();log.info(原始文件名称 : {}, originalFilename);fastDFSFile.setFileName(originalFilename);//文件扩展名比如22.jpgString filenameExtension StringUtils.getFilenameExtension(originalFilename);log.info(文件类型 {}, filenameExtension);//jpgif (filenameExtension null) {return R.error().setCode(208).setMessage(此文件没有文件扩展名);}fastDFSFile.setExt(filenameExtension);//新文件名称String fileName UUID.randomUUID().toString().replace(-, ) . filenameExtension;log.info(新文件名称 {}, fileName);FastDfsFile fastDfsFile1 FastDFSClient.upload(file, fastDFSFile);if (fastDfsFile1 ! null) {fastDfsFileService.save(fastDfsFile1);Long id fastDfsFileService.selectByFileId(fastDfsFile1.getFileId());fastDfsFile1.setId(id);return R.ok().setCode(200).setMessage(上传成功).data(fastDfsFile, fastDfsFile1);}return R.error().setCode(208).setMessage(上传失败);}//restful风格DeleteMapping()public R delete(RequestParam(id) Long id, RequestParam(fileId) String fileId) throws MyException, IOException {Boolean result FastDFSClient.delete(fileId);if (!result) {log.info(删除失败);return R.error().setCode(208).setMessage(删除失败);}int count fastDfsFileService.deleteFastDfsFileById(id);if (count 1) {log.info(删除失败);return R.error().setCode(208).setMessage(删除失败);}log.info(删除成功);return R.ok().setCode(200).setMessage(删除成功);}GetMapping()public void downloadfile(HttpServletResponse response, String fileId, String fileName) throws IOException, MyException {if (fileId null) return;log.info(fileName {}, fileName);response.setContentType(application/force-download;charsetUTF-8);response.setCharacterEncoding(UTF-8);response.addHeader(Content-Disposition, attachment;fileName new String(fileName.getBytes(gb2312), ISO-8859-1));byte[] bytes FastDFSClient.downloadFastFile(fileId);FileInputStream fis null;log.info(fileId {}, fileId);int len 0;OutputStream outputStream null;try {outputStream response.getOutputStream();if (bytes null) {return;}log.info(success);outputStream.write(bytes);outputStream.flush();} catch (Exception e) {e.printStackTrace();} finally {try {if (outputStream ! null) {outputStream.close();}if (fis ! null) {fis.close();}} catch (IOException e) {throw new RuntimeException(e);}}}GetMapping(/getPageFastImg/{page}/{limit})public R getPageFastImg(PathVariable int page, PathVariable int limit) {PageBeanFastDfsFile pageBean fastDfsFileService.findFastDfsFileByPage(page, limit);return R.ok().setCode(200).setMessage(查询成功).data(pageBean, pageBean);}
}8.3.Vue的fast.js
import request from ../../utils/request;const api_name /fastDFSFileexport default {//上传图片uploadImg() {return request({url: ${api_name},method: post,})},getPageFastImg(page, limit) {return request({url: ${api_name}/getPageFastImg/${page}/${limit},method: get,})},getNextPageFastImg(page, limit) {return request({url: ${api_name}/getPageFastImg/${page}/${limit},method: get,})},//restful风格 ?id123fileId456deleteFastImg(id, fileId) {return request({url: ${api_name},method: delete,params: {id: id,fileId: fileId}})},getFileSrc(fileId) {return request({url: ${api_name},method: get,params: {fileId: fileId},responseType: blod})},
}8.4.fastdfsimg.vue
templatedivh2图片管理/h2!--图片列表--el-tablesizesmallstylemargin: 30px;empty-text无数据:dataimgListhighlight-current-row v-loadingloading border element-loading-text拼命加载中el-table-column aligncenter sortable propfilePath label文件路径 width450/el-table-columnel-table-column aligncenter sortable propfileSize label文件大小 width100/el-table-columnel-table-column aligncenter sortable propfileName label文件名 width130/el-table-columnel-table-column aligncenter sortable propext label扩展名 width100/el-table-columnel-table-column aligncenter sortable propfileType label文件类型 width100/el-table-columnel-table-column aligncenter sortable propfilePath label预览图片 width100template slot-scopescopeimg :srcgetImageUrl(scope.row.filePath) stylemax-width: 100px;max-height: 100px alt图标//template/el-table-columnel-table-column label操作 width200 aligncentertemplate slot-scopescopeel-button typetext sizesmall iconel-icon-download clickgetFileSrc(scope.row)下载/el-buttonel-popconfirm title确定删除吗 confirmhandleDeleteOne(scope.row)template #referenceel-button typedanger sizesmall iconel-icon-delete删除/el-button/template/el-popconfirm/template/el-table-column/el-table!-- 分页 --el-pagination classpagination styletext-align: center;margin-top: 50pxlayoutprev, pager, next:current-pagepage:totaltotal:page-sizelimitcurrent-changefetchData/el-pagination/div
/templatescript
import fastApi from /api/fastdfs/fast;
import request from ../../utils/request;export default {name: FastdfsImg,data() {return {total: 0, // 数据库中的总记录数page: 1, // 默认页码limit: 5, // 每页记录数imgList: {},//imagePath: http://192.168.229.141/, // 图片的基础路径}},created() {this.init()},methods: {init() {fastApi.getPageFastImg(this.page, this.limit).then(response {this.imgList response.data.pageBean.liststhis.total response.data.pageBean.totalCount})},//获取图片路径getImageUrl(filePath) {//return ${this.imagePath}${filePath}; // 拼接图片路径return this.$baseImagePath / filePath; // 拼接图片路径},//下一页fetchData(page) {this.page pagefastApi.getNextPageFastImg(this.page, this.limit).then(response {this.imgList response.data.pageBean.liststhis.total response.data.pageBean.totalCount})},// 单选删除handleDeleteOne(FastDfsFile) {fastApi.deleteFastImg(FastDfsFile.id, FastDfsFile.fileId).then(response {this.$message.success(response.message)this.init()})},// 下载文件getFileSrc(FastDfsFile) {//window.open(this.$baseImagePath/FastDfsFile.fileId,_blank);/*fastApi.downloadFastImg(FastDfsFile.fileId).then(response{this.$message.success(response.message)})*/window.location.href request.defaults.baseURL /fastDFSFile?fileId FastDfsFile.fileId fileName FastDfsFile.fileName;}},
}
/scriptstyle scoped/style8.5.效果 九、总结
案例有些不足功能太简单功能复杂可以做一个类似网盘的文件管理系统仅仅学习使用某些功能暂不深入开发有兴趣的伙伴可以尝试一番类似于阿里云oss
endl
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924178.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!