【taotao】客户端测试图片上传

2024-08-25 18:48

本文主要是介绍【taotao】客户端测试图片上传,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

	在上一篇博客中,总结了如何搭建FastDFS图片服务器,并且可以通过配置nginx测试上传图片是否成功。接下
篇博客,将总结如何在客户端使用FastDFS上传图片。
	一.文件上传流程
			
	    二.上传文件的文件名
	在服务端的测试中,我们可以看到成功上传图片后,文件名是由一长串组成的,而此名称都代表着不同的信
息。
	客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引
信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
			
	○ 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保
存。 
	○ 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是
M00,如果配置了store_path1则是M01,以此类推。
	○ 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
	文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件
创建时间戳、文件大小、随机数和文件拓展名等信息。
	三.图片服务的使用
	官方提供了一个jar包:如fastdfs_client_v1.25.jar
	使用方法:
		1. 把FastDFS提供的jar包添加到工程中
		2. 初始化全局配置。加载一个配置文件。
		3. 创建一个TrackerClient对象。
		4. 创建一个TrackerServer对象。
		5. 声明一个StorageServer对象,null。
		6. 获得StorageClient对象。
		7. 直接调用StorageClient对象方法上传文件即可。
	测试代码如下:

		@Testpublic void testUpload() throws Exception {// 1、把FastDFS提供的jar包添加到工程中// 2、初始化全局配置。加载一个配置文件。ClientGlobal.init("D:\\taotaoworkspace\\taotao-manager\\taotao-manager-web\\src\\main\\resources\\properties\\client.conf");// 3、创建一个TrackerClient对象。TrackerClient trackerClient = new TrackerClient();// 4、创建一个TrackerServer对象。TrackerServer trackerServer = trackerClient.getConnection();// 5、声明一个StorageServer对象,null。StorageServer storageServer = null;// 6、获得StorageClient对象。StorageClient storageClient = new StorageClient(trackerServer, storageServer);// 7、直接调用StorageClient对象方法上传文件即可。String[] strings = storageClient.upload_file("D:\\1.jpg", "jpg", null);for (String string : strings) {System.out.println(string);}}

		我们可以将tracker_server的地址写在配置文件中,spring读取配置文件,便于修改。

	   为了方便,我们还可以将FastDFS的功能写在一个工具类中,便于使用。
	   工具类代码如下:

			package com.taotao.fastdfs;import java.io.BufferedOutputStream;import java.io.IOException;import java.net.URLDecoder;import org.csource.common.NameValuePair;import org.csource.fastdfs.ClientGlobal;import org.csource.fastdfs.StorageClient1;import org.csource.fastdfs.StorageServer;import org.csource.fastdfs.TrackerClient;import org.csource.fastdfs.TrackerServer;public class FastDFSClient {private TrackerClient trackerClient = null;private TrackerServer trackerServer = null;private StorageServer storageServer = null;private StorageClient1 storageClient = null;public FastDFSClient(String conf) throws Exception {if (conf.contains("classpath:")) {conf = conf.replace("classpath:", URLDecoder.decode(this.getClass().getResource("/").getPath(),"utf-8"));}ClientGlobal.init(conf);trackerClient = new TrackerClient();trackerServer = trackerClient.getConnection();storageServer = null;storageClient = new StorageClient1(trackerServer, storageServer);}/*** 上传文件方法* <p>Title: uploadFile</p>* <p>Description: </p>* @param fileName 文件全路径* @param extName 文件扩展名,不包含(.)* @param metas 文件扩展信息* @return* @throws Exception*/public String uploadFile(String fileName, String extName, NameValuePair[] metas) throws Exception {String result = storageClient.upload_file1(fileName, extName, metas);return result;}public String uploadFile(String fileName) throws Exception {return uploadFile(fileName, null, null);}public String uploadFile(String fileName, String extName) throws Exception {return uploadFile(fileName, extName, null);}/*** 上传文件方法* <p>Title: uploadFile</p>* <p>Description: </p>* @param fileContent 文件的内容,字节数组* @param extName 文件扩展名* @param metas 文件扩展信息* @return* @throws Exception*/public String uploadFile(byte[] fileContent, String extName, NameValuePair[] metas) throws Exception {String result = storageClient.upload_file1(fileContent, extName, metas);return result;}public String uploadFile(byte[] fileContent) throws Exception {return uploadFile(fileContent, null, null);}public String uploadFile(byte[] fileContent, String extName) throws Exception {return uploadFile(fileContent, extName, null);}/*** 文件的下载方法* @param group fastdfs的组别* @param storagePath 文件的storagePath路径* @param diskpath 磁盘路径* @throws Exception * @throws IOException */public void download_file(String path,BufferedOutputStream output) throws IOException, Exception{//byte[] b = storageClient.download_file(group, path);byte[] b = storageClient.download_file1(path);try{if(b != null){output.write(b);}}catch (Exception e){} //用户可能取消了下载finally {if (output != null)try {output.close();} catch (IOException e) {e.printStackTrace();}}}/*** 文件的删除方法* 返回值:0删除成功* @param group fastdfs的组名* @param storagePath 文件的storagePath路径* @throws Exception * @throws IOException */public Integer delete_file(String group ,String storagePath) throws IOException, Exception{return  storageClient.delete_file(group, storagePath);}}

	四.遇到的问题

		1. 在使用测试类测试图片上传功能,遇到了一个不能连接到tracker server的问题:
             
	查到的最简单粗暴的方式是将防火墙关闭。
	但一般都不推荐使用此方法,所以我们可以通过将端口号添加到防火墙的方法,80、22122这两个添加后依
然不能使用,通过查看tracker的配置文件,发现还有23000的端口号需要开放,添加了这三个端口号之后连接失败的
问题便解决了。
		2. 连接上之后,浏览器访问图片地址,404:
		解决方案:在nginx配置中,添加user root;
	五.总结

	搭建好了FastDFS图片服务器,加上FastDFSClient工具类,结合项目就简单很多了。点滴积累,好好地从入
门做起。

这篇关于【taotao】客户端测试图片上传的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106360

相关文章

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

Java文件上传的多种实现方式

《Java文件上传的多种实现方式》文章主要介绍了文件上传接收接口的使用方法,包括获取文件信息、创建文件夹、保存文件到本地的两种方法,以及如何使用Postman进行接口调用... 目录Java文件上传的多方式1.文件上传接收文件接口2.接口主要内容部分3.postman接口调用总结Java文件上传的多方式1

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

SpringBoot实现websocket服务端及客户端的详细过程

《SpringBoot实现websocket服务端及客户端的详细过程》文章介绍了WebSocket通信过程、服务端和客户端的实现,以及可能遇到的问题及解决方案,感兴趣的朋友一起看看吧... 目录一、WebSocket通信过程二、服务端实现1.pom文件添加依赖2.启用Springboot对WebSocket

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与