zoukankan      html  css  js  c++  java
  • struts2+kindeditor4.0.5的上传图片的实现

    今天开始用kindeditor,主要是因为kindeditor界面干净,API齐全。但上传图片的时候遇到各种问题,我就来个各种解决。kindeditor中jsp的demo是用纯jsp实现,如果你的项目里用到其它的例如struts2,把示例直接放入项目则会出现很多问题,我用的是struts2,下面是我在实现过程中遇到的问题。

    1、页面提示“上传目录不存在”,这个肯定是没有在根目录下建立attached的文件夹。

    2、后台提示Unabletofind 'struts.multipart.saveDir' propertysetting,那肯定是struts没有设置struts.multipart.saveDir,在配置文件里设置即可,如下:

    <constant name="struts.multipart.saveDir" value="\tmp"></constant>

    3、以上两个问题解决了以后,出现的情况如下,点击上传以后,弹出上传错误的弹出层,里面是空内容,这时候就是解决struts2和kindeditor4.0+的上传图片的重点了。

      1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    2 <%@ page import="java.util.*,java.io.*" %>
    3 <%@ page import="java.text.SimpleDateFormat" %>
    4 <%@ page import="org.apache.commons.fileupload.*" %>
    5 <%@ page import="org.apache.commons.fileupload.disk.*" %>
    6 <%@ page import="org.apache.commons.fileupload.servlet.*" %>
    7 <%@ page import="org.json.simple.*" %>
    8 <%@ page import="org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper" %>
    9 <%
    10
    11 /**
    12 * KindEditor JSP
    13 *
    14 * struts2上传
    15 *
    16 */
    17
    18 //文件保存目录路径
    19 String savePath = pageContext.getServletContext().getRealPath("/") + "attached/";
    20 //文件保存目录URL
    21 String saveUrl = request.getContextPath() + "/attached/";
    22
    23 //定义允许上传的文件扩展名
    24 HashMap<String, String> extMap = new HashMap<String, String>();
    25 extMap.put("image", "gif,jpg,jpeg,png,bmp");
    26 extMap.put("flash", "swf,flv");
    27 extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
    28 extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");
    29
    30 //最大文件大小
    31 long maxSize = 204800000;
    32
    33 response.setContentType("text/html; charset=UTF-8");
    34
    35 if(!ServletFileUpload.isMultipartContent(request)){
    36 out.println(getError("请选择文件。"));
    37 return;
    38 }
    39 //检查目录
    40 File uploadDir = new File(savePath);
    41 if(!uploadDir.isDirectory()){
    42 out.println(getError("上传目录不存在。"));
    43 return;
    44 }
    45 //检查目录写权限
    46 if(!uploadDir.canWrite()){
    47 out.println(getError("上传目录没有写权限。"));
    48 return;
    49 }
    50
    51 String dirName = request.getParameter("dir");
    52 if (dirName == null) {
    53 dirName = "image";
    54 }
    55 if(!extMap.containsKey(dirName)){
    56 out.println(getError("目录名不正确。"));
    57 return;
    58 }
    59 //创建文件夹
    60 savePath += dirName + "/";
    61 saveUrl += dirName + "/";
    62 File saveDirFile = new File(savePath);
    63 if (!saveDirFile.exists()) {
    64 saveDirFile.mkdirs();
    65 }
    66 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    67 String ymd = sdf.format(new Date());
    68 savePath += ymd + "/";
    69 saveUrl += ymd + "/";
    70 File dirFile = new File(savePath);
    71 if (!dirFile.exists()) {
    72 dirFile.mkdirs();
    73 }
    74
    75 if (!dirFile.isDirectory()) {
    76 out.println(getError("上传目录不存在 。"));
    77 return;
    78 }
    79 //检查目录写入权限
    80 if (!dirFile.canWrite()) {
    81 out.println(getError("上传目录没有写入权限。"));
    82 return;
    83 }
    84
    85 //Struts2 请求 包装过滤器
    86 MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;
    87 //获得上传的文件名
    88 String fileName = wrapper.getFileNames("imgFile")[0];
    89 //获得文件过滤器
    90 File file = wrapper.getFiles("imgFile")[0];
    91
    92 //检查扩展名
    93 String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
    94 if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){
    95 out.println(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));
    96 return;
    97 }
    98 //检查文件大小
    99 if (file.length() > maxSize) {
    100 out.println(getError("上传文件大小超过限制。"));
    101 return;
    102 }
    103
    104 //重构上传图片的名称
    105 SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
    106 String newImgName = df.format(new Date()) + "_"
    107 + new Random().nextInt(1000) + "." + fileExt;
    108 byte[] buffer = new byte[1024];
    109 //获取文件输出流
    110 FileOutputStream fos = new FileOutputStream(savePath +"/" + newImgName);
    111 //获取内存中当前文件输入流
    112 InputStream in = new FileInputStream(file);
    113 try {
    114 int num = 0;
    115 while ((num = in.read(buffer)) > 0) {
    116 fos.write(buffer, 0, num);
    117 }
    118 } catch (Exception e) {
    119 e.printStackTrace(System.err);
    120 } finally {
    121 in.close();
    122 fos.close();
    123 }
    124
    125 //发送给 KE
    126 JSONObject obj = new JSONObject();
    127 obj.put("error", 0);
    128 obj.put("url", saveUrl +"/" + newImgName);
    129 out.println(obj.toJSONString());
    130 %>
    131
    132 <%!
    133 private String getError(String message) {
    134 JSONObject obj = new JSONObject();
    135 obj.put("error", 1);
    136 obj.put("message", message);
    137 return obj.toJSONString();
    138 }
    139 %>

    其实第三个问题在网上查找的,地址:http://www.linuxso.com/linuxbiancheng/11400.html#goodfb1322

  • 相关阅读:
    如何封装一个Ajax函数
    了解Ajax及Ajax如何发送请求
    jQuery的animate动画方法及动画排队问题解决
    jQuery的几种显示隐藏方法
    冲鸭!电瓶车
    Qt中使用HTTPS
    空非空
    河西走廊
    “财富自由”者之殇
    说鞋
  • 原文地址:https://www.cnblogs.com/zhangyanhu/p/2384482.html
Copyright © 2011-2022 走看看