当前位置: 首页 > 编程日记 > 正文

java+js上传图片_java+ jsp+js 实现富文本编辑和上传图片功能

class FileManageActionController extends BaseAction

{

// windows

private String PATH_LINEs = "\\";

// linux

private String PATH_LINE = "/";

/**

* 文件上传

* @param request {@link HttpServletRequest}

* @param response {@link HttpServletResponse}

* @return json response

*/

@SuppressWarnings("unchecked")

@RequestMapping(value = "/fileUpload", method = RequestMethod.POST)

@ResponseBody

public void fileUpload(HttpServletRequest request, HttpServletResponse response,@RequestParam(value = "imgFile", required = false) MultipartFile[] imgFile ) {

try {

response.setCharacterEncoding("utf-8");

PrintWriter out = response.getWriter();

//文件保存本地目录路径

String savePath = MapCacheManager.getInstance().getMapCache().get("serverPathUp");

String serverPicPath = savePath + "/" + "pic"+ "/";

//文件保存目录URL

String saveUrls =MapCacheManager.getInstance().getMapCache().get("serverPaths");

String saveUrlPath = saveUrls + "/" + "upload"+ "/";

if(!ServletFileUpload.isMultipartContent(request)){

out.print(getError("请选择文件。"));

out.close();

return;

}

//检查目录

File uploadDir = new File(serverPicPath);

if(!uploadDir.isDirectory()){

out.print(getError("上传目录不存在。"));

out.close();

return;

}

//检查目录写权限

if(!uploadDir.canWrite()){

out.print(getError("上传目录没有写权限。"));

out.close();

return;

}

String dirName = request.getParameter("dir");

if (dirName == null) {

dirName = "image";

}

//定义允许上传的文件扩展名

Map extMap = new HashMap();

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,xml,txt,zip,rar,gz,bz2");

if(!extMap.containsKey(dirName)){

out.print(getError("目录名不正确。"));

out.close();

return;

}

//创建文件夹

serverPicPath += dirName + PATH_LINE;

saveUrlPath+= dirName + PATH_LINE;

File saveDirFile = new File(serverPicPath);

if (!saveDirFile.exists()) {

saveDirFile.mkdirs();

}

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

String ymd = sdf.format(new Date());

serverPicPath += ymd + PATH_LINE;

saveUrlPath += ymd + PATH_LINE;

File dirFile = new File(serverPicPath);

if (!dirFile.exists()) {

dirFile.mkdirs();

}

//最大文件大小

long maxSize = 1000000;

// 保存文件

for(MultipartFile iFile : imgFile){

String fileName = iFile.getOriginalFilename();

//检查文件大小

if(iFile.getSize() > maxSize){

out.print(getError("上传文件大小超过限制。"));

out.close();

return;

}

//检查扩展名

String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();

if(!Arrays.asList(extMap.get(dirName).split(",")).contains(fileExt)){

out.print(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));

out.close();

return;

}

SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");

String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;

try{

File uploadedFile = new File(serverPicPath, newFileName);

}catch(Exception e){

out.print(getError("上传文件失败。"));

out.close();

return;

}

System.out.println(saveUrlPath+newFileName);

JSONObject obj = new JSONObject();

obj.put("error", 0);

obj.put("url", saveUrlPath + newFileName);

System.out.println(newFileName+"上传的图片");

out.print(obj.toJSONString());

out.close();

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private Map getError(String errorMsg) {

Map errorMap = new HashMap();

errorMap.put("error", 1);

errorMap.put("message", errorMsg);

return errorMap;

}

}

相关文章:

Outlook接收qq的邮件

1.先去qq邮箱,设置,账户 开启pop3服务,假如之前开启过,最好关闭之后重新开启 最新版本的必须使用邮箱的独立密码才可以收取邮件 (否则就算你之前开通了,也无法用你的qq账号和密码收取邮件的) 2.高级设置里面&#xff0…

架构设计复杂度的6个来源

谈到架构设计,相信每个技术人员都耳熟能详。我总结了三个架构设计相关的特性: 架构设计的思维和程序设计的思维差异很大。架构设计没有体系化的培训和训练机制。程序员对架构设计的理解存在很多误区。 所以,虽然每个程序员心中都有一个成为架…

java swt 画按钮_向表中添加按钮(java swt)

我正在尝试复制类似于此的UI:我一直在关注如何创建表格每列中的按钮的作者说明(没有成功).我的项目与他的区别在于我正在尝试使用Tree而不是Table,而我正在使用eclipse TreeViewer插件进行上下文.从理论上讲,实现似乎应该是直截了当的,但我似乎无法让它发挥作用.这是…

在Windows7 下 mingw32 开发环境中采用 glut3.7 学习 OpenGL

2015年10月2日更新: 发现 freeglut 很好用兼容于 gut ,而且开源还在更新中。因此我觉得放弃以前的 glut 了,转而用 freeglut 了。 买了本《计算机图形学第4版》想学习下图形学,但是书中的例子还是基于上古时期的 glut &#xff0c…

Spring Aop的应用

2019独角兽企业重金招聘Python工程师标准>>> AOP的基本概念 连接点( Jointpoint) : 表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化、方法执行、 方法调用、字段调用或处理异常等等, Spring…

Apache Tomcat 7.x 概述

前言 Tomcat 一直是Java web程序的首选应用服务器,现在已经更新到7.x版本了。如果你还使用老版本,那么你赶快更新到最新版本吧,他改善了不性能,修复了很多BUG。下面我从官网,简单翻译了一下7.x的特性,给你一…

linux mysql清除数据库所有表_MySQL修复指定数据库下的所有表

mysql,mariadb,percona这几天数据库频繁crash,查看日志发现类似如下的错误:[ERROR] mysqld: Table ./database/pre_forum_forumfield is marked as crashed and should be repaired1[ERROR]mysqld:Table./database/pre_forum_forumfieldismarkedascrashedandshouldb…

Java基础知识强化之IO流笔记03:throws的方式处理异常

1. 什么时候使用throws ? (1)定义功能方法时候,需要把出现的问题暴露出来,让调用者去处理。那么就通过throws在方法上标识。 (2)有时候,我们是可以对异常进行处理的,但是又有些时候…

silverlight学习之storyboard (动画)

利用silverlight的storyboard可以很方便的制作一些简单的“动画”,比如控制一些控件double类型或者color类型的属性值的变化。下面简单地说其中最简单的两个方面:DoubleAnimation(控制控件double类型的属性)和ColorAnimation&…

记一次Sonar执行失败的修复

为什么80%的码农都做不了架构师?>>> 前提 在提高代码质量方面公司采用的是JenkinsSonar的方案,通过设定扫描规则对现有代码工程进行扫描。代码扫描后会产生不同级别的问题,例如Bugs、漏洞、坏味道等。针对每个工程的发布是用…

java用if语句调用方法_J2SE中main函数中的if语句想要调用另一个类的方法怎么能实现?...

日常生活中,要完成一件复杂的功能,我们总是习惯把“大功能”分解为多个“小功能”以实现。在C程序的世界里,“功能”可称呼为“函数”,因此“函数”其实就是一段实现了某种功能的代码,并且可以供其它代码调用。一个程序…

Creating Apps With Material Design —— Defining Custom Animations

转载请注明 http://blog.csdn.net/eclipsexys 翻译自Developer Android,时间仓促,有翻译问题请留言指出。谢谢定义动画在材料设计动画让用户与您的应用程序进行交互时,为他们的行为提供反馈。并提供可视化的连续性。该材料的主题提供了一些默…

怎么剪切一段音乐其中的片段

剪切音乐想必大家都不陌生,在各种手机铃声中我们都需要用到它来制作个性有趣的来电铃声,那么大家知道有什么简便的方法使用吗?小编有一个办法就是利用剪切工具的功能就可以完成了,我们就不用不用一点一点的设置音频片段了&#xf…

无需重启, 使用Xephyr调试awesome

每次改了awesome总是心里忐忑的重新启动awesome 稍有不慎就会导致awesome加载失败 而使用默认配置加载. 对于改了一大堆快捷键绑定的人来说, 默认配置简直没法用了... 有时候还会直接起不来...需要用到killall awesome才能退回到lightdm的登录界面偶然发现xephyr这个工具 可以虚…

java程序员遇到的问题_Java 程序员平时最常遇到的故障:系统OOM (一)

作为 Java 程序员而言,先不考虑自己系统外部依赖的缓存、消息队列、数据库等等东西挂掉,就我们自己系统本身而言,最常见的挂掉的原因是什么?其实就是系统OOM,也就是所谓的内存溢出!什么是内存溢出&#xff…

java大文件读写操作,java nio 之MappedByteBuffer,高效文件/内存映射

http://langgufu.iteye.com/blog/2107023 java处理大文件,一般用BufferedReader,BufferedInputStream这类带缓冲的Io类,不过如果文件超大的话,更快的方式是采用MappedByteBuffer。 MappedByteBuffer是java nio引入的文件内存映射方案&#xf…

HTML5 Canvas编写五彩连珠(3):设计

在看了几篇Canvas相关的文章后,发现前两节的代码实现还是有问题,因为知道的少,所以只能在自己已知的知识上做实现。不过还好,这是一个发现的过程,也是一个纠错和完善的过程。我第一次尝试一边学习一遍写博客&#xff0…

SQL面试宝典一:

1.什么是sql Injection(sql 注入)?如何防止? 答:是一种恶意将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法。 防止:1.对用户的输入进行校验,可以通过正则表达…

java注解的执行顺序_深入理解Spring的@Order注解和Ordered接口

前言Spring的Order注解或者Ordered接口大家都知道是控制顺序的,那么它们到底是控制什么顺序的?是控制Bean的注入顺序,还是Bean的实例化顺序,还是Bean的执行顺序呢?那么我们先直接给出结论再来验证结论。结论&#xff1…

数据驱动安全需三大核心新技术

要做到数据驱动安全,齐向东认为需要三大核心技术。第一个核心技术是大数据采集器,第二个是大数据引擎,第三个是机器学习挖掘、重要安全问题定位准确。转载于:https://www.cnblogs.com/1992825-Amelia/p/4854220.html

[转]BI 问答

http://blog.bridata.ca/?cat16 前几天Post 了一些BI 的面试问题,感兴趣的人很多,有很多人问我答案以此来评估一下自己的知识水平。坦白地说我没有写在纸上的具体答案,事实上每个问题也没有具体和精确的答案,所谓面试就不是笔试&…

没有学不会的C++:用户自定义的隐式类型转换

C 中的类型转换包含内建类型的转换和用户自定义类型的转换,而这两者都又可分为隐式转换和显示转换,所以一共有如下四象限表格中的 A、B、C、D 四种情况 隐式转换显示转换(casting)内建类型转换 (int, float ...)AB用户自定义类型转换(类 vs 类; 类 vs 内…

python scrapy菜鸟教程_scrapy学习笔记(一)快速入门

安装ScrapyScrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv、json等文件中。首先我们安装Scrapy。pip install scrapy在Windows上安装时可能会出现错误,提示找不到Microsoft Visual C。这时候我们…

执行eclipse,迅速failed to create the java virtual machine。

它们必须在一排,否则会出现The Eclipse executable launcher was unable to locate its companion shared library的错误 打开eclipse文件夹下的eclipse.ini文件。改动–launcher.XXMaxPermSize属性,当中此属性有两处 -startup plugins/org.eclipse.equi…

vue打包后图片找不到情况

打包之前需要修改如下配置文件: 配置文件一:build>>>utils.js (修改publicPath:"../../" , 这样写是处理打包后找不到静态文件(图片路径失效)的问题) 配置文件二:config>>>index.js(修改a…

UBUNTU安装SSH和xrdp

一、安装SSH,通过PUTTY访问 命令:sudo apt-get install ssh 查看:netstat -l 二、安装xrdp,通过远程桌面访问 命令:sudo apt-get install xrdp 开启远程桌面访问权限 系统-->首选项-->remote desktop 三、去掉远…

python中opencv中inrange用法_python-opencv中的cv2.inRange函数

本次目标是将一副图像从rgb颜色空间转换到hsv颜色空间,颜色去除白色背景部分具体就调用了cv2的两个函数,一个是rgb转hsv的函数具体用法hsv cv2.cvtColor(rgb_image, cv2.COLOR_BGR2HSV)然后利用cv2.inRange函数设阈值,去除背景部分mask cv2…

[转]C++11 随机数学习

相对于C 11之前的随机数生成器来说,C11的随机数生成器是复杂了很多。这是因为相对于之前的只需srand、rand这两函数即可获取随机数来说,C11提供了太多的选择和东西。 随机数生成算法: 随机数生成算法有很多,C11之前的C/C只…

Linux Shell ssh登录脚本

Linux 登陆服务器敲命令太多,某时候确实不便,所以就用shell写了一个 我的blog地址: http://www.cnblogs.com/caoguo 一.说明 支持秘密和密钥两种格式用户名和密码都是写文件的,明文保存二.配置 密码文件配置:序号:IP:端口:用户:密码:说明 1:192.168.88.128:22:root:toor:虚拟机…

C# 温故而知新:Stream篇(二)

C# 温故而知新:Stream篇(二) TextReader 和StreamReader 目录: 为什么要介绍 TextReader? TextReader的常用属性和方法 TextReader 示例 从StreamReader想到多态 简单介绍下Encoding 编码 StreamReader 的定义及作用 S…