KindEditor 版本 kindeditor-4.1.10
1、html
<div class="controls">
<!-- 加载编辑器的容器 -->
<textarea name="goodsdesc" style="width:700px; height:210px" id="editor_id" ></textarea>
</div>
2、依赖脚本
<script type="text/javascript" charset="utf-8" src="media/kindeditor-4.1.10/kindeditor.js"></script>
<script type="text/javascript" src="media/kindeditor-4.1.10/lang/zh-CN.js"></script>
3、下载完成后放入指定目录,配置完成后初始化代码
var editor;
function InitEditor() {
var content = '${goodsModel.goodsDesc}';
KindEditor.ready(function(K) {
editor = K.create('#editor_id', {
//自定义工具栏
items : [ 'code', '|', 'justifyleft', 'justifycenter',
'justifyright', 'justifyfull', 'insertorderedlist',
'insertunorderedlist', 'indent', 'outdent',
'clearhtml', 'quickformat', 'selectall', '|',
'fullscreen', 'formatblock', 'fontname',
'fontsize', '|', 'forecolor', 'hilitecolor',
'bold', 'italic', 'underline', 'strikethrough',
'lineheight', 'removeformat', '|', 'image',
'multiimage', 'insertfile', 'table', 'hr',
'emoticons', 'baidumap', 'pagebreak', 'anchor',
'link', 'unlink' ],
//图片上传Action
uploadJson : 'gfan_yyq!edit_upload.action',
//取消网络图片上传
allowImageRemote : false,
//添加多文件上传
allowFileManager : true,
//同步数值至文本框 (为解决js利用submit方法提交表单时无法获取到内容)
afterBlur: function(){this.sync();}
});
//编辑时加载原内容
if(content!=null){
editor.html(content);
}
});
}
3、action
上传至本项目
public String imgUpload() {
HttpServletResponse response = this.getResponse();
HttpServletRequest request = this.getRequest();
PrintWriter out = null; //输出流
try {
out = response.getWriter();
} catch (IOException e1) {
e1.printStackTrace();
}
String savePath = ServletActionContext.getServletContext().getRealPath("/") + "attached/";
// 文件保存目录URL
String saveUrl = request.getContextPath() + "/attached/";
// 定义允许上传的文件扩展名
HashMap<String, String> extMap = new HashMap<String, String>();
extMap.put("image", "gif,jpg,jpeg,png,bmp");
extMap.put("flash", "swf,flv");
extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");
// 最大文件大小
long maxSize = 1000000;
response.setContentType("text/html; charset=UTF-8");
if (!ServletFileUpload.isMultipartContent(request)) {
out.println(getError("请选择文件。"));
return null;
}
// 检查目录
File uploadDir = new File(savePath);
if (!uploadDir.isDirectory()) {
out.println(getError("上传目录不存在。"));
return null;
}
// 检查目录写权限
if (!uploadDir.canWrite()) {
out.println(getError("上传目录没有写权限。"));
return null;
}
String dirName = request.getParameter("dir");
if (dirName == null) {
dirName = "image";
}
if (!extMap.containsKey(dirName)) {
out.println(getError("目录名不正确。"));
return null;
}
// 创建文件夹
savePath += dirName + "/";
saveUrl += dirName + "/";
File saveDirFile = new File(savePath);
if (!saveDirFile.exists()) {
saveDirFile.mkdirs();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(new Date());
savePath += ymd + "/";
saveUrl += ymd + "/";
File dirFile = new File(savePath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;
// 获得上传的文件名
String fileName = wrapper.getFileNames("imgFile")[0];// imgFile,imgFile,imgFile
// 获得文件过滤器
File file = wrapper.getFiles("imgFile")[0];
// 检查扩展名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if (!Arrays.<String> asList(extMap.get(dirName).split(",")).contains(fileExt)) {
out.println(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName)
+ "格式。"));
return null;
}
// 检查文件大小
if (file.length() > maxSize) {
out.println(getError("上传文件大小超过限制。"));
return null;
}
// 重构上传图片的名称
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String newImgName = df.format(new Date()) + "_"
+ new Random().nextInt(1000) + "." + fileExt;
byte[] buffer = new byte[1024];
// 获取文件输出流
FileOutputStream fos;
// 获取内存中当前文件输入流
InputStream in;
try {
fos = new FileOutputStream(savePath + "/" + newImgName);
in = new FileInputStream(file);
int num = 0;
while ((num = in.read(buffer)) > 0) {
fos.write(buffer, 0, num);
}
in.close();
fos.close();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 发送给 kindeditor
JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", saveUrl + "/" + newImgName);
out.println(obj.toJSONString());
return null;
}
private String getError(String message) {
JSONObject obj = new JSONObject();
obj.put("error", 1);
obj.put("message", message);
return obj.toJSONString();
}
上传值FTP
/**
* ftp上传
* imgFileFileName 文件名
* imgFile 文件
* @return 文件地址
*/
private String image_upload() {
String fname1 = imgFileFileName.split(",")[0];
String[] imgFullNames = { "" };
ContinueFTP ftp = new ContinueFTP();
try {
//获取配置信息
String hostname = this.getSettingMap().get("IMG_FTP_HOSTNAME");
String port = this.getSettingMap().get("IMG_FTP_PORT");
String username = this.getSettingMap().get("IMG_FTP_USERNAME");
String password = this.getSettingMap().get("IMG_FTP_PASSWORD");
String upload_path = this.getSettingMap()
.get("IMG_FTP_UPLOAD_PATH");
String upload_path_virtual_directory = this.getSettingMap().get(
"IMG_FTP_UPLOAD_PATH_VIRTUAL_DIRECTORY");
String virtual_directory = this.getSettingMap().get(
"IMG_FTP_VIRTUAL_DIRECTORY");
boolean flag = ftp.connect(hostname, Integer.parseInt(port),
username, password);
String path = upload_path
+ new SimpleDateFormat("yyyy/MM/dd").format(new Date())
+ "/";
if (flag) {
//执行上传
if (imgFile != null) {
imgFullNames[0] = path+ UUID.randomUUID().toString()+ fname1.substring(fname1.lastIndexOf('.'),fname1.length());
ftp.upload((imgFile).getPath(), virtual_directory+ imgFullNames[0]);
imgFullNames[0] = upload_path_virtual_directory+ imgFullNames[0];
}
ftp.disconnect();
}
} catch (Exception e) {
return "error";
}
// imgFullNames[0] = "/asdf/PImages/2016/04/07/fdf355cc-32c1-4b14-8260-4ff4f190354f.jpg";
return imgFullNames[0];
}
由上可知
想要获取到文件有两种办法
/**
* 第一种 利用wrapper对象
*/
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;
// 获得上传的文件名
String fileName = wrapper.getFileNames("imgFile")[0];// imgFile,imgFile,imgFile
// 获得文件过滤器
File file = wrapper.getFiles("imgFile")[0];
/**
* 第二种 利用struts2特性(生成get,set方法)
*/
private String imgFileFileName;
private File imgFile;
public String getImgFileFileName() {
return imgFileFileName;
}
public void setImgFileFileName(String imgFileFileName) {
this.imgFileFileName = imgFileFileName;
}
public void setImgFile(File imgFile) {
this.imgFile = imgFile;
}
public File getImgFile() {
return imgFile;
}
4、注意,多图上传不兼容火狐浏览器