- 浏览: 269732 次
- 性别:
- 来自: 天津
文章分类
- 全部博客 (183)
- oracle (4)
- informix (1)
- web开发 (6)
- java (49)
- hibernate (1)
- hadoop (1)
- spring (23)
- 非技术 (8)
- ibatis2 (5)
- Linux (6)
- tomcat (14)
- nginx (7)
- dubbo (3)
- myibatis (7)
- webservice 开发 (2)
- mysql (2)
- svn (2)
- redis (7)
- 分布式技术 (17)
- zookeeper (2)
- kafka (2)
- velocity (1)
- maven (7)
- js (1)
- freemarker (1)
- Thymeleaf (3)
- 代码审计 (1)
- ibatis3 (1)
- rabbitmq (1)
最新评论
1.下载:
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.25.4-RELEASE</version>
</dependency>
2.添加配置文件在application.properties中添加:
#读取inputsream阻塞时间
fdfs.so-timeout=3500
fdfs.connect-timeout=6000
#设置缩略图尺寸
fdfs.thumbImage.width=150
fdfs.thumbImage.height=150
#tracker地址
fdfs.trackerList[0]=192.168.6.24:22122
#fdfs.trackerList[1]=192.168.0.202:22122
#通过nginx 访问地址
fdfs.webServerUrl=http://192.168.6.24:8977/
#获取连接池最大数量
fdfs.pool.max-total=200
引入配置:
@ComponentScan(value={"com.github.tobato.fastdfs.service"})
@Configuration
@Import(FdfsClientConfig.class)
// 解决jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastDfsConfig {
}
3.后台代码实现:
package com.tms.bean.system.client;
import com.github.tobato.fastdfs.conn.FdfsWebServer;
import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.exception.FdfsUnsupportStorePathException;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.charset.Charset;
/**
* fastclent
* Created by gjp on 2017/9/19.
*/
@Component
public class FastDFSClient {
private final Logger logger = LoggerFactory.getLogger(FastDFSClient.class);
@Autowired
private FastFileStorageClient storageClient;
@Autowired
private FdfsWebServer fdfsWebServer;
/**
* 上传文件
* @param file 文件对象
* @return 文件访问地址
* @throws IOException
*/
public String uploadFile(MultipartFile file) throws IOException {
StorePath storePath = storageClient.uploadFile(file.getInputStream(),file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()),null);
return getResAccessUrl(storePath);
}
/**
* 上传文件
* @param file 文件对象
* @return 文件访问地址
* @throws IOException
*/
public String uploadFileStream(InputStream is,long size,String fileName) throws IOException {
StorePath storePath = storageClient.uploadFile(is,size, FilenameUtils.getExtension(fileName),null);
return getResAccessUrl(storePath);
}
/**
* 上传文件
* @param file 文件对象
* @return 文件访问地址
* @throws IOException
*/
public String uploadFile(File file) throws IOException {
FileInputStream inputStream = new FileInputStream (file);
StorePath storePath = storageClient.uploadFile(inputStream,file.length(), FilenameUtils.getExtension(file.getName()),null);
return getResAccessUrl(storePath);
}
/**
* 将一段字符串生成一个文件上传
* @param content 文件内容
* @param fileExtension
* @return
*/
public String uploadFile(String content, String fileExtension) {
byte[] buff = content.getBytes(Charset.forName("UTF-8"));
ByteArrayInputStream stream = new ByteArrayInputStream(buff);
StorePath storePath = storageClient.uploadFile(stream,buff.length, fileExtension,null);
return getResAccessUrl(storePath);
}
// 封装图片完整URL地址
private String getResAccessUrl(StorePath storePath) {
String fileUrl = fdfsWebServer.getWebServerUrl() + storePath.getFullPath();
return fileUrl;
}
/**
* 删除文件
* @param fileUrl 文件访问地址
* @return
*/
public void deleteFile(String fileUrl) {
if (StringUtils.isEmpty(fileUrl)) {
return;
}
try {
StorePath storePath = StorePath.praseFromUrl(fileUrl);
storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
} catch (FdfsUnsupportStorePathException e) {
logger.warn(e.getMessage());
}
}
/**
* 图片缩略图
* @param is
* @param size
* @param fileExtName
* @param metaData
* @return 文件访问地址
返回地址为:http://192.168.6.24:8977/group1/M00/00/00/wKgGGFnDGS-AVhrAAAMhasozgRc678.jpg
访问缩略图地址为:http://192.168.6.24:8977/group1/M00/00/00/wKgGGFnDGS-AVhrAAAMhasozgRc678_150x150.jpg
*/
public String upfileImage(InputStream is,long size,String fileExtName,Set<MateData> metaData){
StorePath path = storageClient.uploadImageAndCrtThumbImage(is,size,fileExtName,metaData);
return getResAccessUrl(path);
}
}
4.controller 实现:
package com.tms.controller.system;
import com.tms.bean.system.client.FastDFSClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
/**
* 文件上传
* Created by gjp on 2017/9/19.
*/
@Controller
@RequestMapping("/file")
public class FileUpController {
private static final Logger fLog = LoggerFactory.getLogger(FileUpController.class);
@Resource
private FastDFSClient fastDFSClient;
/**
*
* @param multipartFile
* @return
*/
@ResponseBody
@RequestMapping(value = "/up",method = RequestMethod.POST)
public Map<String,String> fileUp(MultipartHttpServletRequest multipartFile, HttpServletRequest request){
Map<String,String> result = new HashMap<String,String>();
String param = request.getParameter("param");//参数名称
if(StringUtils.isEmpty(param)){
result.put("result","false");
result.put("msg","请添加参数");
}
InputStream is = null;
String fileName = multipartFile.getFile(param).getOriginalFilename();
try {
long size = multipartFile.getFile(param).getSize();
is = multipartFile.getFile(param).getInputStream();
String path = fastDFSClient.uploadFileStream(is,size,fileName);
result.put("result","true");
//图片地址
result.put("srckey",path);
}catch (IOException e){
result.put("result","false");
fLog.error("file:"+fileName,e.fillInStackTrace());
}finally {
if (is !=null){
try {
is.close();
}catch (IOException io){
fLog.error(io.getMessage());
}
}
}
return result;
}
}
5.前台页面实现:
<li>
<span class="reg_label2 rt50 relativeBox"><span class="red_font">*</span>营业执照:</span>
<span class="upload_span relativeBox">
<input type="file" id="id_license" class="input_file absoluteBox notnull" name="license" />
<img src="" id="id_license_img" />
<input type="hidden" id="id_license_value" name="licenseName" />
</span>
</li>
$("#id_license").on("change", function(){
$.ajaxFileUpload({
url: '/file/up', //用于文件上传的服务器端请求地址
secureuri: false, //是否需要安全协议,一般设置为false
fileElementId: 'id_license', //文件上传域的ID
dataType: 'json', //返回值类型 一般设置为json
data:{param:'license'},//file 标签的名称
type:'post',
success: function (data, status) //服务器成功响应处理函数
{
if(data.result == "true"){
alert("上传成功!");
$("#id_license_value").val(data.srckey);
var $file = $(this);
var fileObj = $file[0];
var windowURL = window.URL || window.webkitURL;
var dataURL;
var $img = $("#id_license_img");
if (fileObj && fileObj.files && fileObj.files[0]) {
dataURL = windowURL.createObjectURL(fileObj.files[0]);
$img.attr('src', dataURL);
} else {
dataURL = $file.val();
var imgObj = document.getElementById("preview");
imgObj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
imgObj.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = dataURL;
}
}else {
alert("上传失败!");
}
},error: function (data, status, e)//服务器响应失败处理函数
{
alert(e);
}
})
});
引入js
<script src="../../static/js/ajaxfileupload.js" th:src="@{/js/ajaxfileupload.js}"></script>
<script src="../../static/js/jquery-1.8.3.min.js" th:src="@{/js/jquery-1.8.3.min.js}"></script>
查看效果:
原图:
缩略图:
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.25.4-RELEASE</version>
</dependency>
2.添加配置文件在application.properties中添加:
#读取inputsream阻塞时间
fdfs.so-timeout=3500
fdfs.connect-timeout=6000
#设置缩略图尺寸
fdfs.thumbImage.width=150
fdfs.thumbImage.height=150
#tracker地址
fdfs.trackerList[0]=192.168.6.24:22122
#fdfs.trackerList[1]=192.168.0.202:22122
#通过nginx 访问地址
fdfs.webServerUrl=http://192.168.6.24:8977/
#获取连接池最大数量
fdfs.pool.max-total=200
引入配置:
@ComponentScan(value={"com.github.tobato.fastdfs.service"})
@Configuration
@Import(FdfsClientConfig.class)
// 解决jmx重复注册bean的问题
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastDfsConfig {
}
3.后台代码实现:
package com.tms.bean.system.client;
import com.github.tobato.fastdfs.conn.FdfsWebServer;
import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.exception.FdfsUnsupportStorePathException;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.apache.commons.io.FilenameUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.charset.Charset;
/**
* fastclent
* Created by gjp on 2017/9/19.
*/
@Component
public class FastDFSClient {
private final Logger logger = LoggerFactory.getLogger(FastDFSClient.class);
@Autowired
private FastFileStorageClient storageClient;
@Autowired
private FdfsWebServer fdfsWebServer;
/**
* 上传文件
* @param file 文件对象
* @return 文件访问地址
* @throws IOException
*/
public String uploadFile(MultipartFile file) throws IOException {
StorePath storePath = storageClient.uploadFile(file.getInputStream(),file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()),null);
return getResAccessUrl(storePath);
}
/**
* 上传文件
* @param file 文件对象
* @return 文件访问地址
* @throws IOException
*/
public String uploadFileStream(InputStream is,long size,String fileName) throws IOException {
StorePath storePath = storageClient.uploadFile(is,size, FilenameUtils.getExtension(fileName),null);
return getResAccessUrl(storePath);
}
/**
* 上传文件
* @param file 文件对象
* @return 文件访问地址
* @throws IOException
*/
public String uploadFile(File file) throws IOException {
FileInputStream inputStream = new FileInputStream (file);
StorePath storePath = storageClient.uploadFile(inputStream,file.length(), FilenameUtils.getExtension(file.getName()),null);
return getResAccessUrl(storePath);
}
/**
* 将一段字符串生成一个文件上传
* @param content 文件内容
* @param fileExtension
* @return
*/
public String uploadFile(String content, String fileExtension) {
byte[] buff = content.getBytes(Charset.forName("UTF-8"));
ByteArrayInputStream stream = new ByteArrayInputStream(buff);
StorePath storePath = storageClient.uploadFile(stream,buff.length, fileExtension,null);
return getResAccessUrl(storePath);
}
// 封装图片完整URL地址
private String getResAccessUrl(StorePath storePath) {
String fileUrl = fdfsWebServer.getWebServerUrl() + storePath.getFullPath();
return fileUrl;
}
/**
* 删除文件
* @param fileUrl 文件访问地址
* @return
*/
public void deleteFile(String fileUrl) {
if (StringUtils.isEmpty(fileUrl)) {
return;
}
try {
StorePath storePath = StorePath.praseFromUrl(fileUrl);
storageClient.deleteFile(storePath.getGroup(), storePath.getPath());
} catch (FdfsUnsupportStorePathException e) {
logger.warn(e.getMessage());
}
}
/**
* 图片缩略图
* @param is
* @param size
* @param fileExtName
* @param metaData
* @return 文件访问地址
返回地址为:http://192.168.6.24:8977/group1/M00/00/00/wKgGGFnDGS-AVhrAAAMhasozgRc678.jpg
访问缩略图地址为:http://192.168.6.24:8977/group1/M00/00/00/wKgGGFnDGS-AVhrAAAMhasozgRc678_150x150.jpg
*/
public String upfileImage(InputStream is,long size,String fileExtName,Set<MateData> metaData){
StorePath path = storageClient.uploadImageAndCrtThumbImage(is,size,fileExtName,metaData);
return getResAccessUrl(path);
}
}
4.controller 实现:
package com.tms.controller.system;
import com.tms.bean.system.client.FastDFSClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
/**
* 文件上传
* Created by gjp on 2017/9/19.
*/
@Controller
@RequestMapping("/file")
public class FileUpController {
private static final Logger fLog = LoggerFactory.getLogger(FileUpController.class);
@Resource
private FastDFSClient fastDFSClient;
/**
*
* @param multipartFile
* @return
*/
@ResponseBody
@RequestMapping(value = "/up",method = RequestMethod.POST)
public Map<String,String> fileUp(MultipartHttpServletRequest multipartFile, HttpServletRequest request){
Map<String,String> result = new HashMap<String,String>();
String param = request.getParameter("param");//参数名称
if(StringUtils.isEmpty(param)){
result.put("result","false");
result.put("msg","请添加参数");
}
InputStream is = null;
String fileName = multipartFile.getFile(param).getOriginalFilename();
try {
long size = multipartFile.getFile(param).getSize();
is = multipartFile.getFile(param).getInputStream();
String path = fastDFSClient.uploadFileStream(is,size,fileName);
result.put("result","true");
//图片地址
result.put("srckey",path);
}catch (IOException e){
result.put("result","false");
fLog.error("file:"+fileName,e.fillInStackTrace());
}finally {
if (is !=null){
try {
is.close();
}catch (IOException io){
fLog.error(io.getMessage());
}
}
}
return result;
}
}
5.前台页面实现:
<li>
<span class="reg_label2 rt50 relativeBox"><span class="red_font">*</span>营业执照:</span>
<span class="upload_span relativeBox">
<input type="file" id="id_license" class="input_file absoluteBox notnull" name="license" />
<img src="" id="id_license_img" />
<input type="hidden" id="id_license_value" name="licenseName" />
</span>
</li>
$("#id_license").on("change", function(){
$.ajaxFileUpload({
url: '/file/up', //用于文件上传的服务器端请求地址
secureuri: false, //是否需要安全协议,一般设置为false
fileElementId: 'id_license', //文件上传域的ID
dataType: 'json', //返回值类型 一般设置为json
data:{param:'license'},//file 标签的名称
type:'post',
success: function (data, status) //服务器成功响应处理函数
{
if(data.result == "true"){
alert("上传成功!");
$("#id_license_value").val(data.srckey);
var $file = $(this);
var fileObj = $file[0];
var windowURL = window.URL || window.webkitURL;
var dataURL;
var $img = $("#id_license_img");
if (fileObj && fileObj.files && fileObj.files[0]) {
dataURL = windowURL.createObjectURL(fileObj.files[0]);
$img.attr('src', dataURL);
} else {
dataURL = $file.val();
var imgObj = document.getElementById("preview");
imgObj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
imgObj.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = dataURL;
}
}else {
alert("上传失败!");
}
},error: function (data, status, e)//服务器响应失败处理函数
{
alert(e);
}
})
});
引入js
<script src="../../static/js/ajaxfileupload.js" th:src="@{/js/ajaxfileupload.js}"></script>
<script src="../../static/js/jquery-1.8.3.min.js" th:src="@{/js/jquery-1.8.3.min.js}"></script>
查看效果:
原图:
缩略图:
发表评论
-
spring boot 1.5.6 redis 解决session共享
2017-10-19 10:30 14211.下载: <dependency> ... -
RedisTemplate 对存入redis 中的json 字符串加密和解密
2017-10-11 15:44 6146使用RedisTemplate 对redis操作时,存入的数据 ... -
spring boot 上传文件大小限制
2017-09-25 15:25 1759上传时出现了The field file exceeds it ... -
spring-session 共享session
2017-07-21 11:20 7521.下载jar <!-- spring 共享sessio ... -
Spring4 中使用 jasypt 加密数据密码
2017-07-05 16:59 30871.加载类jar <dependency> ... -
spring3 多视图集成
2017-05-17 10:57 525使用spring3.2.9 集成多视图,可以使用jsp页面,f ... -
spring3.2+velocity 实例
2017-05-15 16:40 417Velocity,名称字面翻译为:速度、速率、迅速,用在Web ... -
spring 获取HttpSession ,HttpServletRequest ,HttpServletResponse
2017-05-02 16:30 1128ServletRequestAttributes servle ... -
spring4 + quarz2 集群
2017-03-20 15:55 5521下载: def springVers ... -
spring 测试工具
2017-03-17 17:08 448package com.cloud.test; ... -
拦截 @ResponseBody 标签输出的结果打印日志
2017-03-09 17:22 2228@ResponseBody @RequestMapp ... -
spring4 aop 使用
2017-03-09 10:23 6141.下载 jar //core spring ... -
@ResponseBody 返回对象中的Date类型如何格式化格式
2017-02-21 16:52 14771.首先定义一个格式化Date 类,这个类要实现Jso ... -
string @InitBinder 使用
2017-01-16 15:41 745在SpringMVC中,bean中定义了Date,doubl ... -
String 注解使用
2017-01-12 11:37 857二 @RequestHeader、@CookieVa ... -
Spring 的@RequestMapping注解
2017-01-12 11:35 527@RequestMapping RequestMappi ... -
spring4 使用@ResponseBody 返回中文时发现客户端乱码
2017-01-12 11:01 765在使用spring4 使用@ResponseBody 返回中 ... -
spring JdbcTemplate 不提交的问题
2015-05-29 10:54 4592最近 使用 spring3 的 JdbcTemplate ... -
使用spring3 配置自动任务
2015-05-28 17:47 5701.首先配置 spring3 的配置文件 <? ... -
spring 配置 自动任务
2015-02-03 12:00 580spring 中配置文件,定义 每天6:10:10 ...
相关推荐
创建FastDFS文件操作的相关Service,如FastDfsFileUploadService、FastDfsFileDownloadService和FastDfsFileDeleteService。这些Service将封装FastDFS的API,处理文件的上传、下载和删除逻辑。 4. **Controller层*...
5. **文件存储**:分布式网盘系统需考虑文件的分布式存储,可能采用了如Hadoop HDFS、FastDFS或者阿里云OSS等解决方案,以实现高可用和扩展性。 6. **权限控制**:Spring Security或Apache Shiro可以用于实现系统的...
7.2 AJAX异步请求:利用jQuery或Vue.js等库,实现页面数据的异步加载和交互。 八、搜索与推荐 8.1 搜索功能:实现全文搜索,可以使用Elasticsearch等搜索引擎,提高查询效率。 8.2 推荐算法:基于用户行为的协同...
另外,他还参与了昆山政协会议管理系统,负责用户管理等多个模块,利用SpringMVC、Spring、MyBatis框架,通过maven构建,Git进行版本控制,Redis进行缓存和动态Token验证,还实现了文件上传下载功能。 最后,他在...
+ springBoot + springCloud + 日志组件logback-spring + 多配置 + 多数据源 + swagger2 + 异步线程池配置 + mybatis-plus + 令牌token + 全局异常管理 + 统一返回数据拦截 + 自定义异常 + 处理ajax跨域请求 + ...
8. **文件存储**:fastDFS文件存储系统用于储存文件,提高文件上传和下载的效率。 9. **负载均衡与动静分离**:Nginx实现页面动静分离和负载均衡,优化系统性能。 10. **单点登录**:CAS单点登录系统提供用户认证...
jun_plugin项目项目说明jun_plugin整合Java企业级各种开发组件,开箱即用,不写重复代码笔者其他项目功能实现和使用jun_springboot:jun_springcloud:基础篇:企业级开发组件功能列表(jun_plugin) 【fastdfs-...
笔者其他项目功能实现和使用 jun_springboot: jun_springcloud: 基础篇:企业级开发组件功能列表(jun_plugin) 【fastdfs-client-java】 【jun_activiti】 【jun_ajax】 【jun_aliyun_sms】 【jun_cron】 ...
* FastDFS 分布式文件存储系统 * Tracker、Storage 工作机制 * 文件存储及上传下载 云计算 * 阿里云 OSS * Oauth2 * 短信服务 项目管理 * Maven 项目依赖管理 * Git 版本控制 * Linux 常用命令 业务流程 * ...