fastdfs连接mysql_fastdfs的学习以及上传⽂件下载⽂件FastDFS 是什么,有什么作⽤?
FastDFS 是⼀个开源的轻量级分布式⽂件系统
作⽤:它对⽂件进⾏管理,功能包括:⽂件存
储、⽂件同步、⽂件访问(⽂件上传、⽂件下载)等,解决了⼤容量存储和负载均衡的问题。
特别适合以⽂件为载体的在线服务,如相册⽹站、视频⽹站等等。
FastDFS如何实现数据同步?
同⼀组内的 storage server 之间是对等的,⽂件上传、删除等操作可以在任意⼀台 storage
server 上进⾏;
⽂件同步只在同组内的 storage server 之间进⾏,采⽤ push ⽅式,即源服务器同步给⽬
标服务器;
源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
上述第⼆条规则有个例外,就是新增加⼀台storage server时,由已有的⼀台storage server
将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器
Tracker 的启动 停⽌命令是什么?
/etc/init.d/fdfs_trackerd start
/etc/init.d/fdfs_trackerd status
/etc/init.d/fdfs_trackerd stop
Storage的启动 停⽌命令是什么?
/etc/init.d/fdfs_storaged start
/etc/init.d/fdfs_storaged status
/etc/init.d/fdfs_storaged stop在命令⾏如何实现 上传 下载 删除?
上传:
fdfsFile = storageClient.upload_file(local_filename, file_ext_name, meta_list);
下载:
downFile = storageClient.download_file(groupName, remoteFilename);
删除:
flag = storageClient.delete_file(groupname, remotefilename);
Java端配置FastDFS有⼏种⽅式 分别是什么?
两种:fig
#连接超时,单位秒
connect_timeout=10
#⽹络超时,单位秒
network_timeout=30
#字符集设置
charset=UTF-8
# 必须和 tracker server 中的/etc/f 配置⽂件中的 http.server_port=8080 配置 ⼀致acker_http_port=8080
# tracker server 的访问 IP 和 Port。
tracker_server=192.168.92.136:22122
Fdfs.properties
# 连接超时, 单位是秒
#⽹络超时, 单位是秒 \
fastdfswork_timeout_in_seconds=30
# 字符集设置
fastdfs.charset=UTF-8
# 必须和 tracker server 中的/etc/f 配置⽂件中的 http.server_port=8080 配置 ⼀致\ fastdfs.http_tracker_http_port=8080
# tracker server 的访问 IP 和 Port。
如何实现⽹页下载 请⽤⾃⼰的话 描述⼀下下载流程?
⾸先先在前台jsp页⾯给定超链接⽤于发送下载⽂件请求并携带⽂件ID
在前端控制器接收前台的请求和数据,然后向后台请求数据
/**
* 下载⽂件
* @param fileInfoId 要下载的⽂件在数据库中的相关数据主键
*/
@RequestMapping(value="/downloadFile/{fileInfoId}")
public void downloadFile(@PathVariable("fileInfoId") Long fileInfoId, HttpServletResponse response){ // 获取要传递给客户端的⽂件数据
InputStream inputStream = null;
try {
inputStream = File(fileInfoId);
FileInfo fileInfo = FileInfoById(fileInfoId);
// 设置响应头, 响应为下载,下载的⽂件名是什么
response.setContentType("application/octet-stream");
response.setHeader("content-disposition", "attachement;filename="+FileName());
// 通过输出流输出⽂件内容到客户端
OutputStream outputStream = OutputStream();
byte[] temp = new byte[512];
int len = 0;
while((len = ad(temp)) != -1){
outputStream.write(temp, 0, len);
}
// 刷新缓存
outputStream.flush();
}catch(Exception e){
e.printStackTrace();
}finally {
if(inputStream != null){ // 回收资源
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
3.书写fastDFS的下载⽂件⽅法,⽤于获取后台数据库的数据
/**
* 下载⽂件
* @return 要下载的⽂件的输⼊流
*/
public static InputStream download(String groupName, String remoteFileName){ try{
byte[] datas = storageClient.download_file(groupName, remoteFileName);
return new ByteArrayInputStream(datas);
}catch(Exception e){
e.printStackTrace();
return null;
}
}
4.写service层代码。通过mapper层获取数据库数据
@Override
public InputStream getFile(Long fileInfoId) {
// 访问数据库,获取要下载的⽂件的详情信息
FileInfo fileInfo = this.fileInfoMapper.selectById(fileInfoId);
// 访问FastDFS,获取要下载的⽂件的具体内容
InputStream inputStream = FastDFSCommonsUtils.GroupName(), RemoteFileName()); // 返回
return inputStream;
}
@Override
public FileInfo getFileInfoById(Long fileInfoId) {
return this.fileInfoMapper.selectById(fileInfoId);
}在mapper层写SQL语句获取数据
select id, file_name as fileName, group_name as groupName, remote_file_name as remoteFileName,
file_path as filePath
from t_files
where id = #{id}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论