SpringMVC图片上传(使用kindeditor图片上传插件和FastDFS分布式文件系统)

//kindeditor的官方文档

//http://kindeditor.net/docs/upload.html

//前台页面

// 编辑器参数

kingEditorParams : {

//指定上传文件参数名称等同于<input name="uploadFile">属性

filePostName  : "uploadFile",

//指定上传文件请求的url

uploadJson : '/pic/upload',

扫描二维码关注公众号,回复: 1943874 查看本文章

//上传类型,分别为image、flash、media、file

dir : "image"

}


<!-- 使用springMVC上传文件,需要在springmvc.xml中配置文件上传解析器,id名称一定为multipartResolver -->

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!-- 设定默认编码 -->

<property name="defaultEncoding" value="UTF-8"></property>

<!-- 可对文件上传大小做限制,具体属性可以查看 如5M=1024*1024*5-->

<property name="maxUploadSize" value="5242880"></property>

</bean>


<!-- 在web层添加配置文件client.conf,书写内容为tracker_server=10.211.55.3:22122 -->

tracker_server=10.211.55.3:22122


<!-- 在web层添加配置文件FastDFSURL.properties,书写内容为 -->

#图片服务器的地址

IMAGE_SERVER_URL="http://10.211.55.3/"


// 使用kindeditor需要返回的json数据格式如下,则返回一个Map集合即可(Entity类也可以)


返回格式(JSON)

//成功时
{
        "error" : 0,
        "url" : "http://www.example.com/path/to/file.ext"
}
//失败时
{
        "error" : 1,
        "message" : "错误信息"
}



//FastDFSClient为工具类

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:", this.getClass().getResource("/").getPath());

}

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);

}

}






// 书写Controller层代码

import java.util.HashMap;

import java.util.Map;


import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;


import cn.e3mall.common.utils.FastDFSClient;


@Controller

public class PictureController {

        

        //动态读取FastdfsURL.properties中url地址,解决硬编码问题

@Value("${IMAGE_SERVER_URL}")

private String IMAGE_SERVER_URL;

@RequestMapping("/pic/upload")

@ResponseBody

public Map uploadPicture(MultipartFile uploadFile){

try{

                        

                //此处使用的fastdfs_client Maven工程,安装到本地仓库,并添加依赖可以直接使用(目的导入fastdfs_client.jar)

//把图片上传到服务器

FastDFSClient fastDFSClient = new FastDFSClient("classpath:conf/client.conf");

//获得文件的扩展名

String originalName = uploadFile.getOriginalFilename();

String ext = originalName.substring(originalName.lastIndexOf(".")+1);

//得到一个图片的地址和文件名

String url = fastDFSClient.uploadFile(uploadFile.getBytes(),ext);

//补充完整的URL

url = IMAGE_SERVER_URL + url;

//kindeditor的官方文档

//http://kindeditor.net/docs/upload.html

//使用的图片上传为kindeditor插件,需要返回json

//返回Map,通过@ResponseBody转化为json

Map resultMap = new HashMap<>();

resultMap.put("error", 0);

resultMap.put("url", url);

return resultMap;

}catch (Exception e) {

e.printStackTrace();

Map resultMap = new HashMap<>();

resultMap.put("error", 0);

resultMap.put("message", "图片上传失败");

return resultMap;

}

}

}












猜你喜欢

转载自blog.csdn.net/itcats_cn/article/details/80535388
今日推荐