【js】KindEditor + struts2使用详解(上传文件,支持多图上传)

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、注意,多图上传不兼容火狐浏览器

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值