java极简使用FastFDFS文件服务器上传图片

  • 工具类FastDFSUtil代码
  • config.properties配置文件
  • ImgUtil工具类方法
  • 依赖包jar

结果图(由于内外网原因链接我换一张图):http://api.ly-huangtu.cn:10007/group1/M00/00/00/CgoAr16kA_SAOf3VAAAi56-lwbc74.jpeg

工具类FastDFSUtil代码

package com.jilong.eurekaconsumer.fdfs;import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.junit.Test;
import java.io.IOException;
import java.util.ResourceBundle;public class FastDFSUtil {//初始化配置文件,java自带类static ResourceBundle resourceBundle = null;static {resourceBundle =  ResourceBundle.getBundle("config");}@Testpublic void fdfsRun() throws IOException, MyException {try {//加载fasetdfs配置项Properties props = new Properties();props.put(ClientGlobal.PROP_KEY_TRACKER_SERVERS,resourceBundle.getString("tracker_server"));props.put(ClientGlobal.PROP_KEY_CONNECT_TIMEOUT_IN_SECONDS,ClientGlobal.DEFAULT_CONNECT_TIMEOUT);props.put(ClientGlobal.PROP_KEY_NETWORK_TIMEOUT_IN_SECONDS,ClientGlobal.DEFAULT_NETWORK_TIMEOUT);ClientGlobal.initByProperties(props);/*** 下面这种加载配置的方式在天翼云linux环境内会报异常,建议使用上面这种方式↑*/// 1、加载配置文件,配置文件中的内容就是tracker服务的地址(绝对路径)
//            ClientGlobal.init( FastDFSUtil.class.getResource("/fdfs.properties").getPath());//获得配置文件的路径// 2、创建一个TrackerClient对象TrackerClient trackerClient = new TrackerClient();// 3、使用阿哥TrackerClient对象创建连接,获得一个TrackerServer对象TrackerServer trackerServer = trackerClient.getConnection();String ip = trackerServer.getInetSocketAddress().toString();//获得ip+端口// 4、创建一个StorageServer的引用,值为nullStorageServer storageServer = null;// 5、创建一个StorageClient对象,需要两个参数TrackerServer对象、Storage、Server的引用StorageClient storageClient = new StorageClient(trackerServer, storageServer);//当前路径创建文件夹‘imgs’String savePath = resourceBundle.getString("savePath");//获取图片保存地址//判断项目根目录下面是否存在image文件夹,没有进行创建FileUtils.createOrExistsDir(savePath);String img = "https://www.baidu.com/img/bd_logo1.png";//将图片转换成base64String base64 =  ImgUtil.imgBase64(img);//把base64转换成图片在存到指定路径‘savePath’String pathUrl =  ImgUtil.GenerateImage(base64,savePath);// 6、使用StorageClient对象上传图片,扩展名不用带“.”String [] strs = storageClient.upload_file(pathUrl,"jpeg",null);FileUtils.deleteEveryThing(pathUrl);//上传成功后删除本地文件// 7、返回数组,包含组名和图片的路径System.out.print("地址为:");String path = "";for (String str : strs) {   // 组名+磁盘地址path = path + str + "/";}// 进行地址处理并输出System.out.println("http://"+resourceBundle.getString("tracker_path")+"/"+path.substring(0,path.length()-1));} catch (Exception e) {e.printStackTrace();}}}
配置文件请放在resources目录下

config.properties配置文件

#上传fdfsd的地址 ip+端口  如: office-xxx2.cn:8888
tracker_server = 你的上传fdfsd的地址
#访问fdfs地址 ip+端口  如: office-xxx1.cn:8888
tracker_path = 你的访问fdfs地址
#将base64生成图片到本地,当前路径创建文件夹‘imgs’
savePath = imgs

ImgUtil工具类方法

package com.jilong.eurekaconsumer.fdfs;import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class ImgUtil {/*** 将网络图片转成Base64码,此方法可以解决解码后图片显示不完整的问题* (加上data:image/jpeg;base64,)* @param "imgURL图片地址。 例如:http://***.com/271025191524034.jpg* @return*/public static String imgBase64(String imgURL) {ByteArrayOutputStream outPut = new ByteArrayOutputStream();byte[] data = new byte[1024];try {// 创建URLURL url = new URL(imgURL);// 创建链接HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(10 * 1000);if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {return "fail";// 连接失败/链接失效/图片不存在}InputStream inStream = conn.getInputStream();int len = -1;while ((len = inStream.read(data)) != -1) {outPut.write(data, 0, len);}inStream.close();} catch (IOException e) {e.printStackTrace();}// 对字节数组Base64编码BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(outPut.toByteArray());}/*** @Description: base64字符串转化成图片** @param: imgStr* @Return:*/public static String GenerateImage(String base64str, String savepath) { // 对字节数组字符串进行Base64解码并生成图片if (base64str == null) // 图像数据为空return "";// System.out.println("开始解码");base64str=base64str.replace("data:image/jpeg;base64,","");//base64str=base64str.replaceAll(" ", "+");BASE64Decoder decoder = new BASE64Decoder();try {// Base64解码byte[] b = decoder.decodeBuffer(base64str);// System.out.println("解码完成");for (int i = 0; i < b.length; ++i) {if (b[i] < 0) {// 调整异常数据b[i] += 256;}}// System.out.println("开始生成图片");// 生成jpeg图片String imgName =""+ System.currentTimeMillis()/1000;
//            OutputStream out = new FileOutputStream(savepath+"\\"+imgName+".jpg"); //windows 路径String path = savepath+"/"+imgName+".jpg";path = path.replaceAll("/","\\\\");// linux 路径OutputStream out = new FileOutputStream(path); // linux 路径out.write(b);out.flush();out.close();return path;} catch (Exception e) {return "";}}
}

依赖包jar

       <dependency><groupId>net.oschina.zcx7878</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27.0.0</version></dependency><!-- 工具包 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.5.10</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>

超级重点: 感谢观看 : )

java极简使用FastFDFS文件服务器上传图片相关推荐

  1. 面试题之硬币排成线java极简解法

    问题描述:有 n 个硬币排成一条线.两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止.拿到最后一枚硬币的人获胜. 请判定 第一个玩家 是输还是赢? 该题为一道典型的动态规划题,但此处 ...

  2. Java极简角色权限后台管理框架springboot manager

    springboot manager 介绍 基于SpringBoot + Thymeleaf + Layui + Apache Shiro + Redis + Mybatis Plus 的后台管理系统 ...

  3. java 模板引擎_极简 Spring Boot 整合 Thymeleaf 页面模板

    点击"牧码小子"关注,和众多大牛一起成长! 关注后,后台回复 java ,领取松哥为你精心准备的技术干货! 虽然现在慢慢在流行前后端分离开发,但是据松哥所了解到的,还是有一些公司在 ...

  4. Java swing 自定义窗口最大、最小和关闭的极简方法

    Java swing 自定义窗口最大.最小和关闭的极简方法, 直接代码伺候: package com.yufu.test; import java.awt.EventQueue; import jav ...

  5. 视频教程-极简Java五:IO流-Java

    极简Java五:IO流 华中科技大学毕业,十余年行业经验,曾带领团队完成CPN客户管理系统,并完成农业银行网站,乐途旅游网等网站的开发,在Java领域有深厚的积累,授课风格深入浅出,直指核心. 夏昊 ...

  6. Java新手极简指北手册

    在理论上, 理论和实践是没有差异的; 但在实践中, 是有的. In theory, there is no difference between theory and practice. But in ...

  7. 我的世界高仿java材质包网易版_我的世界极简风格材质包下载大全【1.7.x-1.9.x1.10】...

    我的世界1.7.2 1.7.10 1.8.0 1.8.8 1.8.9 1.9.0 1.9.2 1.10极简风格材质包下载大全.那下面给大家分享的这个材质包可以说是红石党必备的一款材质,那有喜欢的玩家不 ...

  8. [转载]芋道 Soul 极简入门(国产微服务网关)

    摘要: 原创出处 http://www.iocoder.cn/Soul/install/ 「芋道源码」欢迎转载,保留摘要,谢谢! 由于原著写作时间时间有点久了:有部分类容需要更新,后去个人会再发布文章 ...

  9. Spring Boot 极简集成 Shiro

    点击关注公众号,Java干货及时送达 1. 前言 Apache Shiro是一个功能强大且易于使用的Java安全框架,提供了认证,授权,加密,和会话管理. Shiro有三大核心组件: Subject: ...

  10. 《Kotlin极简教程》第三章 Kotlin基本数据类型

    正式上架:<Kotlin极简教程>Official on shelves: Kotlin Programming minimalist tutorial 京东JD:https://item ...

最新文章

  1. 016_logback中的Encoder
  2. 2020 我的C++学习之路 C++PrimerPlus第五章课后习题
  3. 【转】自然语言系列学习之表示学习与知识获取(二)word2vec
  4. 初步了解并使用正则表达式 (REGular EXPression)
  5. [Yii Framework] spl_autoload_register 导致加载顺序冲突
  6. IOS 定义手势监听器详解,利用 UIGestureRecognizer 进行捏合、旋转、平移、点击、长按手势事件响应
  7. Qt工作笔记-moveToThread的基本使用以及让线程安全退出
  8. Linux学习笔记---使用BusyBox创建根文件系统(三)
  9. HDOJ 1282 回文数猜想(回文串类)
  10. C++基础::Stream
  11. python中grid的用法_SVM中如何使用grid.py
  12. Windows 95 输入法编辑器
  13. Y的十年职业生涯小结(2012-2022)
  14. 太强了,用Python+Excel制作天气预报表!
  15. 新猿木子李:0基础学python培训教程 Python操作Excel之写入数据
  16. php exchange,Windows-使用PHP访问Exchange的最佳方法?
  17. php ECShop form,在ecshop中添加页面并且实现后台管理
  18. 数据分析中的严谨问题
  19. EntityUtils MapStruct BeanCopier 数据实体类转换工具 DO BO VO DTO 附视频
  20. 【猿来小课】解析Linux学习问题汇总

热门文章

  1. Python爬虫入门教程【7】: 蜂鸟网图片爬取之二
  2. 网件rax40可以刷梅林_Netgear 网件 RAX40 AX3000规格 无线路由器 开箱拆解评测
  3. EndNote X8教程(PDF+video)
  4. Python:RSA秘钥生成与加密解密整理
  5. 纪录片《燃点》快上映
  6. 支付宝崩了登上微博热搜
  7. Spring Cloud之赵国的覆灭
  8. 流媒体后视镜方案关键技术--调节后视图像显示范围
  9. 卡西欧电子词典EV-SP3900(英汉日版)
  10. 处理器流水线长度是否存在理论极限?