if (fis != null) {
int len = fis.available();
file_buff = new byte[len];
fis.read(file_buff);
}
string[] fileids = storageclient.upload_file(file_buff, getfileext(filename), meta_list);
return fileids;
} catch (exception ex) {
return null;
}finally{
if (fis != null){
try {
fis.close();
} catch (ioexception e) {
e.printstacktrace();
}
}
}
}
/**
-
根据组名和远程文件名来删除一个文件
-
@param groupname
-
例如 "group1" 如果不指定该值,默认为group1
-
@param remotefilename
-
例如"m00/00/00/wkgxgk5hblvfp86raaaachd9x1y736.jpg"
-
@return 0为成功,非0为失败,具体为错误代码
*/
public static int deletefile(string groupname, string remotefilename) {
try {
int result = storageclient.delete_file(groupname == null ? “group1” : groupname, remotefilename);
return result;
} catch (exception ex) {
return 0;
}
}
/**
-
修改一个已经存在的文件
-
@param oldgroupname
-
旧的组名
-
@param oldfilename
-
旧的文件名
-
@param file
-
新文件
-
@param filename
-
新文件名
-
@return 返回空则为失败
*/
public static string[] modifyfile(string oldgroupname, string oldfilename, file file, string filename) {
string[] fileids = null;
try {
// 先上传
fileids = uploadfile(file, filename);
if (fileids == null) {
return null;
}
// 再删除
int delresult = deletefile(oldgroupname, oldfilename);
if (delresult != 0) {
return null;
}
} catch (exception ex) {
return null;
}
return fileids;
}
/**
-
文件下载
-
@param groupname 卷名
-
@param remotefilename 文件名
-
@return 返回一个流
*/
public static inputstream downloadfile(string groupname, string remotefilename) {
try {
byte[] bytes = storageclient.download_file(groupname, remotefilename);
inputstream inputstream = new bytearrayinputstream(bytes);
return inputstream;
} catch (exception ex) {
return null;
}
}
public static namevaluepair[] getmetadate(string groupname, string remotefilename){
try{
namevaluepair[] nvp = storageclient.get_metadata(groupname, remotefilename);
return nvp;
}catch(exception ex){
ex.printstacktrace();
return null;
}
}
/**
-
获取文件后缀名(不带点).
-
@return 如:“jpg” or “”.
*/
private static string getfileext(string filename) {
if (stringutils.isblank(filename) || !filename.contains(“.”)) {
return “”;
} else {
return filename.substring(filename.lastindexof(“.”) + 1); // 不带最后的点
}
}
}
然后我们就可以来测试上传的操作了。
public static void main(string[] args) {
try {
file file = new file(“d:/2.jpg”);
inputstream is = new fileinputstream(file);
string filename = uuid.randomuuid().tostring()+“.jpg”;
string[] result = fastdfsclient.uploadfile(is, filename);
system.out.println(arrays.tostring(result));
} catch (exception e) {
e.printstacktrace();
}
}
访问即可:http://192.168.56.100:8888/group1/m00/00/00/wkg4zghcue6aza2uaaw8dix5p50374.jpg
返回后的字符串的结构说明
1.2 文件下载
文件下载的流程,如下
文件下载的流程为:
-
client询问tracker需要下载的文件的storage,参数为文件的标识(group加文件名)。
-
tracker根据客户端的参数返回一台可用的storage。
-
client根据返回的storage直接完成对应的文件的下载。
有了上面的基础,文件下载就非常简单了,我们只需要根据前面上传的文件的group和文件的存储路径就可以通过storageclient中提供的downloadfile方法把对应的文件下载下来了,具体的代码如下
/**
- 文件下载
*/
public static void downloadfile(){
try {
inputstream is = fastdfsclient
.downloadfile(“group1”, “m00/00/00/wkg4zghcue6aza2uaaw8dix5p50374.jpg”);
outputstream os = new fileoutputstream(new file(“d:/12.jpg”));
int index = 0 ;
while((index = is.read())!=-1){
os.write(index);
}
os.flush();
os.close();
is.close();
} catch (exception e) {
e.printstacktrace();
}
}
我们在实际工作中基本都是和springboot整合在一起来使用的,那么我们就来看看fastdfs是如何在springboot项目中来使用的。首先创建一个普通的springboot项目,然后导入fastdfs-spring-boot-starter这个依赖。
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
com.luhuiguo
fastdfs-spring-boot-starter
0.2.0
既然是一个starter,那么必然会在spring.factories文件中提供对应的自动配置类。
可以看到给我们提供的配置类为fdfsautoconfiguration进入后可以看到帮我们注入了很多的核心对象。
然后可以看到系统提供的配置信息,前缀为 fdfs
然后我们就可以在application.properties中配置fastdfs的配置信息了。
配置完成后我们就可以测试文件的上传下载操作了
@springboottest
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。
深知大多数java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加v获取:vip1024b (备注java)
《mysql面试专题》
《mysql性能优化的21个最佳实践》
《mysql高级知识笔记》
文中展示的资料包括:**《mysql思维导图》《mysql核心笔记》《mysql调优笔记》《mysql面试专题》《mysql性能优化的21个最佳实践》《mysq高级知识笔记》**如下图
关注我,点赞本文给更多有需要的人
[外链图片转存中…(img-g0a1v8bu-1711934091952)]
[外链图片转存中…(img-jeospehi-1711934091953)]
[外链图片转存中…(img-kuuosb1w-1711934091953)]
[外链图片转存中…(img-ctja5cks-1711934091953)]
[外链图片转存中…(img-j6rd7vy2-1711934091953)]
[外链图片转存中…(img-qcer8xnk-1711934091954)]
[外链图片转存中…(img-kgmzforh-1711934091955)]
[外链图片转存中…(img-fik6wwp2-1711934091955)]
文中展示的资料包括:**《mysql思维导图》《mysql核心笔记》《mysql调优笔记》《mysql面试专题》《mysql性能优化的21个最佳实践》《mysq高级知识笔记》**如下图
[外链图片转存中…(img-csgb3hwg-1711934091955)]
关注我,点赞本文给更多有需要的人
发表评论