tracker_server服务器搭建好以后,fastdfs图片上传 具体在项目中的应用(附完整代码,资源文件)
环境一定要先搭建好搭建的详细步骤和资源文件详见上一篇博客https://blog.csdn.net/qq_37767455/article/details/100175038一、运行截图最后浏览器访问二、主要用到的代码1.配置文件2.controller3.serviceOverridepublicAppResponseuploadFile(MapString,Objectparam){AppResponse appResponsenull;try{MultipartFile multipartFile[](MultipartFile[])param.get(files);for(inti0;imultipartFile.length;i){FastDFSFile filenewFastDFSFile();//file.setAuthor((String) param.get(userId));//图片格式后缀String extmultipartFile[i].getOriginalFilename().substring(multipartFile[i].getOriginalFilename().lastIndexOf(.)1);file.setContent(multipartFile[i].getBytes());file.setName(multipartFile[i].getOriginalFilename());file.setExt(ext);//上传图片String filePath[]FastDfsUtil.upload(file);CommodityFilePath commodityFilePathnewCommodityFilePath();//返回图片路径commodityFilePath.setFilePath(serverFdfsfilePath[0]/filePath[1]);appResponseAppResponse.success(上传成功,commodityFilePath);}}catch(Exceptione){appResponseAppResponse.bizError(上传失败e);}returnappResponse;}4.图片上传 fastdfs工具类importorg.csource.common.NameValuePair;importorg.csource.fastdfs.*;importorg.slf4j.LoggerFactory;importorg.springframework.core.io.ClassPathResource;importjava.io.ByteArrayInputStream;importjava.io.IOException;importjava.io.InputStream;publicclassFastDfsUtil{privatestaticorg.slf4j.Logger loggerLoggerFactory.getLogger(FastDfsUtil.class);static{try{String filePathnewClassPathResource(../resources/fdfs_client.conf).getFile().getAbsolutePath();ClientGlobal.init(../resources/fdfs_client.conf);}catch(Exceptione){logger.error(FastDFS Client Init Fail!,e);}}publicstaticString[]upload(FastDFSFile file){logger.info(File Name: file.getName()File Length:file.getContent().length);NameValuePair[]meta_listnewNameValuePair[1];meta_list[0]newNameValuePair(author,file.getAuthor());longstartTimeSystem.currentTimeMillis();String[]uploadResultsnull;StorageClient storageClientnull;try{storageClientgetTrackerClient();uploadResultsstorageClient.upload_file(file.getContent(),file.getExt(),meta_list);}catch(IOExceptione){logger.error(IO Exception when uploadind the file:file.getName(),e);}catch(Exceptione){logger.error(Non IO Exception when uploadind the file:file.getName(),e);}logger.info(upload_file time used:(System.currentTimeMillis()-startTime) ms);if(uploadResultsnullstorageClient!null){logger.error(upload file fail, error code:storageClient.getErrorCode());}String groupNameuploadResults[0];String remoteFileNameuploadResults[1];logger.info(upload file successfully!!!group_name:groupName, remoteFileName: remoteFileName);returnuploadResults;}publicstaticFileInfogetFile(String groupName,String remoteFileName){try{StorageClient storageClientgetTrackerClient();returnstorageClient.get_file_info(groupName,remoteFileName);}catch(IOExceptione){logger.error(IO Exception: Get File from Fast DFS failed,e);}catch(Exceptione){logger.error(Non IO Exception: Get File from Fast DFS failed,e);}returnnull;}publicstaticInputStreamdownFile(String groupName,String remoteFileName){try{StorageClient storageClientgetTrackerClient();byte[]fileBytestorageClient.download_file(groupName,remoteFileName);InputStream insnewByteArrayInputStream(fileByte);returnins;}catch(IOExceptione){logger.error(IO Exception: Get File from Fast DFS failed,e);}catch(Exceptione){logger.error(Non IO Exception: Get File from Fast DFS failed,e);}returnnull;}publicstaticbyte[]downByte(String groupName,String remoteFileName){try{StorageClient storageClientgetTrackerClient();byte[]fileBytestorageClient.download_file(groupName,remoteFileName);returnfileByte;}catch(IOExceptione){logger.error(IO Exception: Get File from Fast DFS failed,e);}catch(Exceptione){logger.error(Non IO Exception: Get File from Fast DFS failed,e);}returnnull;}publicstaticvoiddeleteFile(String groupName,String remoteFileName)throwsException{StorageClient storageClientgetTrackerClient();intistorageClient.delete_file(groupName,remoteFileName);logger.info(delete file successfully!!!i);}publicstaticStorageServer[]getStoreStorages(String groupName)throwsIOException{TrackerClient trackerClientnewTrackerClient();TrackerServer trackerServertrackerClient.getConnection();returntrackerClient.getStoreStorages(trackerServer,groupName);}publicstaticServerInfo[]getFetchStorages(String groupName,String remoteFileName)throwsIOException{TrackerClient trackerClientnewTrackerClient();TrackerServer trackerServertrackerClient.getConnection();returntrackerClient.getFetchStorages(trackerServer,groupName,remoteFileName);}publicstaticStringgetTrackerUrl()throwsIOException{returnhttp://getTrackerServer().getInetSocketAddress().getHostString():ClientGlobal.getG_tracker_http_port()/;}privatestaticStorageClientgetTrackerClient()throwsIOException{TrackerServer trackerServergetTrackerServer();StorageClient storageClientnewStorageClient(trackerServer,null);returnstorageClient;}privatestaticTrackerServergetTrackerServer()throwsIOException{TrackerClient trackerClientnewTrackerClient();TrackerServer trackerServertrackerClient.getConnection();returntrackerServer;}}FastDFSFile类publicclassFastDFSFile{privateString name;privatebyte[]content;privateString ext;privateString md5;privateString author;publicStringgetName(){returnname;}publicvoidsetName(String name){this.namename;}publicbyte[]getContent(){returncontent;}publicvoidsetContent(byte[]content){this.contentcontent;}publicStringgetExt(){returnext;}publicvoidsetExt(String ext){this.extext;}publicStringgetMd5(){returnmd5;}publicvoidsetMd5(String md5){this.md5md5;}publicStringgetAuthor(){returnauthor;}publicvoidsetAuthor(String author){this.authorauthor;}}5.还有用到的类CommodityFilePathpublicclassCommodityFilePath{String filePath;publicStringgetFilePath(){returnfilePath;}publicvoidsetFilePath(String filePath){this.filePathfilePath;}}

相关新闻

【紧急预警】AI副业时间衰减曲线已启动:第7天起效率断崖式下跌?3步动态重校准协议立即生效

【紧急预警】AI副业时间衰减曲线已启动:第7天起效率断崖式下跌?3步动态重校准协议立即生效

更多请点击: https://codechina.net 第一章:AI副业时间衰减曲线的本质认知与紧急预警信号识别 AI副业的时间投入产出比并非线性增长,而呈现典型的指数级衰减特征——初期高响应、快反馈的“蜜月期”往往掩盖了底层不可持续性。其本质源于三…

2026/10/14 3:05:56 阅读更多 →
暑假的感受

暑假的感受

今天是九月一号,又迎来了一年的 开学季现在处于大二的我们,感觉时间过的好快啊!经过一个月的学 习,感觉自己的暑假过的很充实,学到了很多的东西,认识了很多的朋友。 同时,在这里我认识了自己的师…

2026/10/14 3:05:34 阅读更多 →
为什么你的AI工作流总卡在“能用但不稳”阶段?——拆解17个高隐蔽性断点与6套已验证修复模板

为什么你的AI工作流总卡在“能用但不稳”阶段?——拆解17个高隐蔽性断点与6套已验证修复模板

更多请点击: https://intelliparadigm.com 第一章:为什么你的AI工作流总卡在“能用但不稳”阶段?——拆解17个高隐蔽性断点与6套已验证修复模板 AI工作流在POC阶段常表现良好,却在生产环境频繁出现延迟抖动、输出漂移、上下文截断…

2026/10/7 15:13:58 阅读更多 →

最新新闻

问题:ubuntu与linux开发板互ping

问题:ubuntu与linux开发板互ping

一、问题原理要解决ubuntu与开发板互ping的问题,就是要使ubuntu和开发板在同一个网段上面。本次问题解决环境:开发板 和 windows 均通过wifi的方式连接网络。二、解决方法1、首先将ubuntu设置成桥接模式状态栏上方点击 虚拟机,点击 设置&…

2026/10/14 3:05:32 阅读更多 →
2026年全国3D溜溜网云渲染速度表现及选购参考指南

2026年全国3D溜溜网云渲染速度表现及选购参考指南

云渲染服务核心评估维度与行业标准当前3D设计领域数字化服务需求持续增长,云渲染服务已成为设计师提升出图效率的核心工具,不同平台的服务能力差异较大,明确统一的评估标准可帮助用户降低选型成本。对于同时承接3个家装项目、自有设备单张4K效…

2026/10/14 3:05:32 阅读更多 →
Chat2DB:开源AI数据库终端,自然语言转SQL的工程实践

Chat2DB:开源AI数据库终端,自然语言转SQL的工程实践

简介:Chat2DB是一款面向软件开发者的AI驱动型开源数据库管理工具,专为降低SQL使用门槛而设计,特别适合非数据库专家、初级开发者及数据分析师快速开展数据库查询、分析与迁移工作。资源包为项目源码压缩包(zip格式)&am…

2026/10/14 3:05:32 阅读更多 →
MySQL索引优化:从B+树原理到慢查询实战

MySQL索引优化:从B+树原理到慢查询实战

做后端开发这几年,最常被拉到群里去救火的场景,十有八九是数据库慢查询。系统跑得好好的,突然某天接口变慢、CPU飙高,一看日志全是SELECT走了全表扫描,几百万行的表一次查询几秒钟才回来。这种时候,十次里有…

2026/10/14 3:05:32 阅读更多 →
RGF_CJ 全局函数全解析:从应用生命周期、系统定时器到窗口与指针互操作

RGF_CJ 全局函数全解析:从应用生命周期、系统定时器到窗口与指针互操作

图形学桌面应用 【免费下载链接】RGF_CJ RGF是仓颉Windows系统下的通用渲染框架(兼应用开发框架)。RGF仓颉版(后续简称"RGF")基于RGF(C/C版)封装优化而来。RGF为开发者提供轻量化、安全、高性能以及高度一致性的2D渲染能…

2026/10/14 3:05:32 阅读更多 →
Python爬虫实战:手机APP数据抓取与解析全流程

Python爬虫实战:手机APP数据抓取与解析全流程

简介:这份PDF资料面向具备Python基础、对网络请求与爬虫开发感兴趣的技术爱好者与研发工程师,围绕手机APP数据传输的抓取与解析展开,重点讲解如何借助Fiddler抓包定位登录与话题接口,再通过urllib2构造HTTP请求、携带Header与表单…

2026/10/14 3:04:31 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →