struts中用kindeditor实现的图片上传并且显示在页面上
做公司网站的时候由于需要在内容属性中加入图片,所以就有了这个问题,本来一开始找几篇文章看都是讲修改kindeditor/jsp/file_manager_json.jsp和upload_json.jsp,可我改了半天地址,还是没改对,所以想到另一个方法,因为upload_json.jsp的主要功能就是上传图片呗,用的是java语言,在jsp中代码都用<%%>包起来了,所以我直接页面中上传功能那里直接去找的action里面的方法,然后用java去写,内容是在网上找的一个写好的,不过介绍的不好,我这里在几个重点位置上讲一下,根据各位的项目不同,对应该一下就可以了。
首先说一下我的kindeditor放在项目的webroot下,位置就是这样,
然后就是在要放kindeditor文本编辑器的页面,name="content" 就是文本的name。
里面abc!upload是我的abc!action的方法upload,里面是上传的代码,
package action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import org.json.JSONException;
import org.json.JSONObject;
import com.opensymphony.xwork2.ActionSupport;
/**
* kindeditor 图片上传类(单个图片上传)
* @author lijinlong
*
*/
public class abcaction extends ActionSupport {
private static final long serialVersionUID = -5324165857715375773L;
private Logger log = Logger.getLogger(this.getClass());
private String imgPath="C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/foodweb/attached";//存储路径, 绝对路径
// private String imgPath="F:/Users/03/AppData/Local/MyEclipse/作品/.metadata/.me_tcat/webapps/foodweb/attached";
private String imgUrl="";//显示url, 相对路径
private String ip;
private String port;
private String context;
public String upload() throws FileUploadException, IOException, JSONException{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = response.getWriter();
String savePath = imgPath + "/";
File test = new File(savePath);
if(!test.exists()){
test.mkdirs();
}
//文件保存目录URL
String saveUrl = imgUrl + "/";
//定义允许上传的文件扩展名
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.print(getError("请选择文件。"));
return "err";
}
//检查目录
File uploadDir = new File(savePath);
if(!uploadDir.isDirectory()){
out.print(getError("上传目录不存在。"));
return "err";
}
//检查目录写权限
if(!uploadDir.canWrite()){
out.print(getError("上传目录没有写权限。"));
return "err";
}
String dirName = request.getParameter("dir");
if (dirName == null) {
dirName = "image";
}
if(!extMap.containsKey(dirName)){
out.print(getError("目录名不正确。"));
return "err";
}
//创建文件夹
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();
}
MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper)request;
String fileName = wrapper.getFileNames("imgFile")[0];
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.print(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));
}
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
saveUrl += newFileName;
FileOutputStream fos = new FileOutputStream(savePath + newFileName);
byte[] buffer = new byte[1024];
InputStream in = new FileInputStream(file);
try {
int num = 0;
while ((num = in.read(buffer)) > 0) {
fos.write(buffer, 0, num);
}
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
try{
if(in != null)
in.close();
if(fos != null)
fos.close();
}catch(IOException e){}
}
JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", "http://"+this.getIp() + ":" + this.getPort()+saveUrl);
obj.put("url", "http://www.foodweb.com.cn/attached/"+saveUrl);
out.print(obj.toString());
return null;
}
private String getError(String message) throws JSONException {
JSONObject obj = new JSONObject();
obj.put("error", 1);
obj.put("message", message);
return obj.toString();
}
public String getImgPath() {
return imgPath;
}
public void setImgPath(String imgPath) {
this.imgPath = imgPath;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
}
以下是几个重点要设置的方面:
1.imgpath=""里面的内容是存储的路径,就是东西存到哪里,这是服务器的位置,在myeclipse就是Tomcat中的位置,foodweb是我的项目名字,attached是放在项目webroot下的文件,用来存储照片的,另外还有点注意,就是注意斜杠的方向,这个是/,而从电脑上复制的地址是\,这个路径没什么提醒的了。
2.imgurl=“”里面的内容是相对路径,我测试过,里面就空着就行,跟上面的代码一样不用管。
3.代码的151行那块,有段这个 obj.put("url", "http://www.foodweb.com.cn/attached/"+saveUrl); 代码,这个前面不用改,改后面的值就好,http://www.foodweb.com.cn/attached/,这是服务器的地址,前面的www.foodweb.com.cn是网址,后面的attached是项目中webroot下的文件。
然后大致就是这些了,如果各位有什么问题指出,可以评论,我每天上线可以看见,可以交流一下,最后注意斜杠什么的都别落下就好。
struts中用kindeditor实现的图片上传并且显示在页面上的更多相关文章
- vue项目 多文件上传并显示在页面上
<template> <label for="file" class=" btn btn-default" style="borde ...
- kindeditor编辑器和图片上传独立分开的配置细节
关于kindeditor编辑器上传按钮的异步加载最关键的部署问题,它的上传图片的组件都已经封装得很好了的,只需要监听到页面按钮的点击事件给编辑器对象传递一些对应的初始化参数即可显示图片上传的弹窗实现异 ...
- ruby on rails爬坑(三):图片上传及显示
一,问题及思路 最近在用rails + react + mysql基本框架写一个cms + client的项目,里面涉及到了图片的上传及显示,下面简单说说思路,至于这个项目的配置部署,应该会在寒假结束 ...
- 图片上传即时显示javascript代码
这是基于javascript的一种图片上传即时显示方法,测试结果IE6和火狐浏览器可以正常使用.google浏览器不兼容. 这种方法兼容性比较差,仅供参考,建议使用ajax方法来即时显示图片. 1.首 ...
- 图片上传并显示(兼容ie),图片大小判断
图片上传并显示(兼容ie),图片大小判断 HTML <div id="swf" style="margin: 0 auto;text-align: center;& ...
- KindEditor 修改多图片上传显示限制大小和张数
在使用KindEditor的时候用到多图片上传时,提示有最多上传20张图片,单张图片容量不超过1MB: 修改的文件的地方在:kindeditor\plugins\multiimage\multiima ...
- asp.net core 如何集成kindeditor并实现图片上传功能
准备工作 1.visual studio 2015 update3开发环境 2.net core 1.0.1 及以上版本 目录 新建asp.net core web项目 下载kindeditor ...
- 图片上传和显示——上传图片——上传文件)==ZJ
http://www.cnblogs.com/yc-755909659/archive/2013/04/17/3026409.html aspx上传 http://www.cnblogs.com/mq ...
- 安卓自定义View实现图片上传进度显示(仿QQ)
首先看下我们想要实现的效果如下图(qq聊天中发送图片时的效果): 再看下图我们实现的效果: 实现原理很简单,首先我们上传图片时需要一个进度值progress,这个不管是自己写的上传的方法还是使用第三方 ...
随机推荐
- bzoj 4537 HNOI2016 最小公倍数
Description 给定一张N个顶点M条边的无向图(顶点编号为1,2,-,n),每条边上带有权值.所有权值都可以分解成2^a*3^b的形式.现在有q个询问,每次询问给定四个参数u.v.a和b,请你 ...
- 如何在yarn上运行Hello World(二)
在之前的一篇文章我们介绍了如何编写在yarn集群提交运行应用的AM的yarnClient端,现在我们来继续介绍如何编写在yarn集群控制应用app运行的核心模块 ApplicationMaster ...
- 正确使用volatile场景--状态标志
同步机制:volatile 特点:可见性:不具备原子性 每个线程有自己单独的内存:如果线程1和线程2公用一个变量name:如果两个线程并发进行,并且需要访问变量name:如果这个变量具有了可见性,线程 ...
- win10 音频服务未响应的解决方法
最近在调试usb audio设备,由于使用的是自己的audio 设备,所以要频繁的更换采样率,可是 在win10中经常出现一些莫名其妙的问题,今天这个问题就是折腾了我好久才搞定的. 当把usb aud ...
- 自己动手写把”锁”---LockSupport介绍
本篇是<自己动手写把"锁">系列技术铺垫的最后一个知识点.本篇主要讲解LockSupport工具类,它用来实现线程的挂起和唤醒. LockSupport是Java6引入 ...
- WebRTC 入门到放弃(一)WebRTC
前言 WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的技术,是谷歌2010年以6820万美元收购Gl ...
- python_第2课
前言 回顾一下python+selenium基础,并整理相关知识点,分享给有需要,在前进道路上的朋友. 由于不是在python中敲的代码,有可能有缩进等相关错误,请自行检查 数据类型 #python中 ...
- ubuntu16.04安装flash player与谷歌浏览器(chrome)
一,安装 adobe flash player sudo apt-get upgradesudo apt-get install flashplugin-installer 二,安装chrome浏览器 ...
- MicroPython最全资料集锦丨TPYBoard全系列教程之文档+例程源码
MicroPython成功将Python引入到嵌入式领域,近几年MicroPython的发展和普及也证明,Python无疑将在未来几年内快速抢占和蚕食C/C++的份额.包括现在比较火爆的机器人.无人机 ...
- 【python3之文件操作】
一.文件操作 1.文件处理的流程 1)打开文件,得到文件句柄并赋值给一个变量 2)通过句柄对文件进行操作 3)关闭文件 例如: f = open('chenli.txt') #打开文件 first_l ...