现象,KindEditor单张图片上传 banner.jpg 没问题。

其他人,上传就是提示 服务器报错。

最终,自己换了个浏览器,复现了。

 

最后得出的结论是:

banner.jpg 没问题。

500qiang.png就不行。

png后缀的,需要上传到临时目录,临时目录不存在,Windows和Linux都会报错的。

最开始还以为是,Linux没权限。

 

DiskFileItemFactory factory = new DiskFileItemFactory();
        // 临时文件目录,linux有/tmp目录,windows需要在当前磁盘下D盘创建“/tmp”目录
        // 坑人的地方,banner.jpg不进入/tmp目录,当然也就不需要创建。而500qiang.png就进入到/tmp目录,必须先创建目录
        factory.setRepository(new File(UPLOAD_TMP_DIR));

 

这段代码,就算设置了临时目录,PNG图片才会进去(upload_6a949562_2397_4220_b449_54022e43c596_00000003.tmp),jpg不会进去,不需要设置临时目录。

具体原因不详,暂时懒得去深究这个技术细节了。

今后,还是手动设置目录比较稳妥。

@Controller
public class KindeditorController extends BaseController {

	// 上传文件的临时目录
	private static final String UPLOAD_TMP_DIR = "/tmp";

	@RequestMapping("/kindeditor/uploadJson")
	public void kindeditorUploadJson(HttpServletRequest request, HttpServletResponse response)
			throws FileUploadException {
		response.setContentType("text/html;charset=UTF-8");

		long maxSize = GlobalConfig.Image.maxSize;
		// 定义允许上传的文件扩展名
		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");
		String dirName = request.getParameter("dir");
		if (dirName == null) {
			dirName = "image";
		}

		if (!ServletFileUpload.isMultipartContent(request)) {
			super.returnJsonString(response, ("请选择文件。"));
			return;
		}
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 临时文件目录,linux有/tmp目录,windows需要在当前磁盘下D盘创建“/tmp”目录
		// 坑人的地方,banner.jpg不进入/tmp目录,当然也就不需要创建。而500qiang.png就进入到/tmp目录,必须先创建目录
		factory.setRepository(new File(UPLOAD_TMP_DIR));
		ServletFileUpload upload = new ServletFileUpload(factory);
		upload.setHeaderEncoding("UTF-8");
		List items = upload.parseRequest(request);
		Iterator itr = items.iterator();
		String finalFileName = "";
		while (itr.hasNext()) {
			FileItem item = (FileItem) itr.next();
			String fileName = item.getName();
			long fileSize = item.getSize();
			if (!item.isFormField()) {
				// 检查文件大小
				if (fileSize > maxSize) {
					super.returnJsonString(response, getError(GlobalConfig.Image.maxSizeTip));
					return;
				}
				// 检查扩展名
				String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
				if (!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)) {
					super.returnJsonString(response, getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));
					return;
				}
				try {
					String ossDomain = BasePropertyConfigurer.getContextProperty("ossDomain");
					finalFileName = ossDomain + "/"
							+ ImageUploaderUtil.handleOssFileList(item.getName(), item.getInputStream());
				} catch (Exception e) {
					super.returnJsonString(response, getError("上传文件失败。"));
					return;
				}

				JSONObject obj = new JSONObject();
				obj.put("error", 0);
				obj.put("url", finalFileName);
				super.returnJsonObject(response, obj);

			}
		}

	}