springmvc整合kindEditor的时候上传图片在IE下提示下载

发布于 2021-11-19 07:16:31 字数 3285 浏览 773 评论 12

springmvc整合kindEditor的时候上传图片在IE下提示下载

代码如下

@SuppressWarnings("rawtypes")
	@RequestMapping(value = "file_upload.do", method = RequestMethod.POST)
	@ResponseBody
	public Map<String, Object> fileUpload(HttpServletRequest  request,
			HttpServletResponse response) throws ServletException, IOException,
			FileUploadException {
		ServletContext application = request.getSession().getServletContext();
		String savePath = application.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/plain;charset=UTF-8");

		if (!ServletFileUpload.isMultipartContent(request)) {
			return getError("请选择文件。");
		}
		// 检查目录
		File uploadDir = new File(savePath);
		if (!uploadDir.isDirectory()) {
			return getError("上传目录不存在。");
		}
		// 检查目录写权限
		if (!uploadDir.canWrite()) {
			return getError("上传目录没有写权限。");
		}

		String dirName = request.getParameter("dir");
		if (dirName == null) {
			dirName = "image";
		}
		if (!extMap.containsKey(dirName)) {
			return getError("目录名不正确。");
		}
		// 创建文件夹
		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");
		List items = upload.parseRequest(request);
		Iterator itr = items.iterator();
		while (itr.hasNext()) {
			FileItem item = (FileItem) itr.next();
			String fileName = item.getName();
			if (!item.isFormField()) {
				// 检查文件大小
				if (item.getSize() > maxSize) {
					return getError("上传文件大小超过限制。");
				}
				// 检查扩展名
				String fileExt = fileName.substring(
						fileName.lastIndexOf(".") + 1).toLowerCase();
				if (!Arrays.<String> asList(extMap.get(dirName).split(","))
						.contains(fileExt)) {
					return getError("上传文件扩展名是不允许的扩展名。n只允许"
							+ extMap.get(dirName) + "格式。");
				}

				SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
				String newFileName = df.format(new Date()) + "_"
						+ new Random().nextInt(1000) + "." + fileExt;
				try {
					File uploadedFile = new File(savePath, newFileName);
					item.write(uploadedFile);
				} catch (Exception e) {
					return getError("上传文件失败。");
				}

				Map<String, Object> msg = new HashMap<String, Object>();
				msg.put("error", 0);
				msg.put("url", saveUrl + newFileName);
				return msg;
			}
		}

		return null;
	}

下载得到的文件是upload.do,upload.do这个文件中的内容为 返回的json字符串。

在火狐 或者谷歌浏览是就OK的

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(12

睫毛上残留的泪 2021-11-22 17:04:55

还要注意去掉@ResponseBody注解

够钟 2021-11-22 17:04:52

Resource interpreted as Document but transferred with MIME type application/json: "http://localhost/MyBlog/file_upload.do?dir=image". 用谷歌浏览器的是 有一句这样的警告

半世蒼涼 2021-11-22 17:04:52

用Chrome或者FireBug查看一下那个连接返回来的Header. 分析一下. 我前段时间还写了的.

囚你心 2021-11-22 16:50:57

用Chrome或者FireBug查看一下那个连接返回来的Header. 分析一下. 我前段时间还写了的.

掩饰不了的爱 2021-11-22 16:34:15

怎么写呢?俺是菜鸟

沙与沫 2021-11-22 15:42:45

我去试试 。

本宫微胖 2021-11-22 15:12:46

回复
response.setContentType("text/html"); response.setCharacterEncoding("UTF-8");

心欲静而疯不止 2021-11-22 13:26:13

之前就是text/html 也是不行的,后来在论坛上面说改成html/plain  结果还是不行

虐人心 2021-11-22 12:28:40

之前就是text/html 也是不行的,后来在论坛上面说改成html/plain 结果还是不行

命硬 2021-11-22 07:53:56

把你的代码: response.setContentType("text/plain;charset=UTF-8");

改为:response.setContentType("text/html");

response.setCharacterEncoding("UTF-8")

断爱 2021-11-21 19:44:37

真的可以了,谢谢!

泛滥成性 2021-11-21 16:33:49

看你的返回其中包含:

<header>
    <name>Content-Type</name>
    <value>application/json;charset=UTF-8</value>
</header>

IE浏览器是不认识这些的.

建议你把fileUpload的这个方法不要返回Map, 改成void.然后使用如下代码:

response.reset();
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");
        PrintWriter writer = null;
        try {
            writer = response.getWriter();
            writer.println(json);  //想办法把map转成json
            writer.flush();
        } catch (IOException e) {
            log.warn(e);
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (Exception e) {
                    log.debug(e);
                }
            }
        }

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文