文档章节

input file文件上传简单示例

 若有思无
发布于 2015/01/14 14:35
字数 636
阅读 38
收藏 0
<form action="<%=request.getContextPath()%>/chat" method="post"
    enctype="multipart/form-data" data-ajax="false" name="form" id="form"  target="relnews">
    <input type="hidden" name="name" id="name" value="" /> 
    <input type="hidden" name="taskId" id="taskId" value="" /> 
    <input type="file" name="image" id="image" class="photo" onchange="sendImage(this)" />
</form>

<!-- 隐藏域作为表单提交后页面不跳转使用 -->
	<iframe align="center" frameborder="0" marginheight="0" marginwidth="0"
		name="relnews" id="hiddenIframe" scrolling="no"
		style="width: 100%; height: 100%; display: none"> </iframe>

js:
function sendMessage() {
    var text = DWRUtil.getValue("message");
    if("" != text){
        DWRUtil.setValue("message", "");
        Chat.addMessage(text, name, taskId, gotMessages);
    }
}

直接上代码解释:

jar包:commons-io-1.4.jar

commons-fileupload-1.2.2.jar

log4j-1.2.14.jar

如果参考我写的框架还需要加入dwr的jar包:dwr.jar

(广告时间:我的action 调用的js 是 用的dwr 提交实现的,有兴趣的可以参考博文http://my.oschina.net/u/1790925/blog/366346

这里我的目的是选择一张图片后直接上传到服务器上,没有通过submit按钮提交,同时要把一些文字信息带入,因为上传图片的关键要设置

enctype="multipart/form-data"

而这个设置之后。后台则无法通过request方法直接获得文字属性了。所以后台取值也采用了特殊的方法。

/**
	 * 原生request处理图片上传
	 * 
	 * */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		//获取请求URL
		String url = request.getContextPath();
		//创建图片工厂类
		DiskFileItemFactory factory = new DiskFileItemFactory();
		//创建上传工具类
		ServletFileUpload uploader = new ServletFileUpload(factory);
		List<FileItem> list = null;

		try {
			//格式化request
			list = uploader.parseRequest(request);
		} catch (FileUploadException e1) {
			e1.printStackTrace();
		}

		String name = "";//用户名
		String taskid = "";//任务ID
		String fileName = "";//文件名称
		for (FileItem item : list) {
			if (item.isFormField()) {
				// 处理普通表单域,form表单设置enctype="multipart/form-data" 时 表单中其他input控件需要通过该方式取值
				String field = item.getFieldName();// 表单域名,既参数名称

				if (field.equals("name")) {
					name = item.getString("UTF-8");// 这里需要设置页面的编码方式,与页面编码方式相同
				} else if (field.equals("taskId")) {
					taskid = item.getString("UTF-8");// 同上
				}
			} else {
				fileName = item.getName();// 文件名称
				int index = fileName.lastIndexOf("\\");
				if (index != -1) {
					fileName = fileName.substring(index + 1);
				}
				// 创建一个以当前时间+文件名格式的图片名称,如图片名:image.png → 20150108082222image.png  以确保图片唯一
				SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
				fileName = sdf.format(new Date()) + fileName;
				
				//判断是否存在图片文件夹不存在则新建
				try {
					   if (!(new File(getServletContext().getRealPath(
								"/pic")).isDirectory())) {
					    new File(getServletContext().getRealPath(
								"/pic")).mkdir();
					   }
					  } catch (SecurityException e) {
					   e.printStackTrace();
					  }
				
				//图片上传到服务器路径下的pic目录中
				String filepath = "pic/" + fileName;
				try {
					item.write(new File(getServletContext().getRealPath(
							"/" + filepath)));
				} catch (Exception e) {
					e.printStackTrace();
				}// 执行保存
			}
			if (!item.isInMemory())
				item.delete();
		}






© 著作权归作者所有

粉丝 1
博文 15
码字总数 16550
作品 0
南京
私信 提问
File杂谈——拖拽异步上传实现

在前一篇文章《File杂谈——拖拽上传前传》中我制作了一个静态的拖拽上传界面,拖拽文件到显示区域释放,可以显示拖入文件的基本信息。本文将在此基础上进一步加工,打造一个完整的拖拽上传示...

Mr.Zheng
2015/07/02
175
0
Apache Commons fileUpload实现文件上传

找了好久,才找到的,很实用 将Apache的commons-fileupload.jar放在应用程序的WEB-INFlib下,即可使用。下面举例介绍如何使用它的文件上传功能。 所使用的fileUpload版本为1.2,环境为Eclip...

wumingyue
2012/08/29
202
0
解决input file按钮要点击两次才弹出选择文件窗口

在隐藏的文件输入框上调用click()方法 从Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1)开始,你可以隐藏掉默认的文件输入框元素,使用自定义的界面来充当打开文件选择对话框的按...

豆花饭烧土豆
2016/05/10
398
0
使用 JavaScript File API 实现文件上传

File API 是 Mozilla 向 W3C 提出的一个草案,旨在用标准 JavaScript API 实现本地文件的读取。File API 将极大地方便 Web 端的文件上传等操作,并有望成为未来的 HTML 5 规范的一部分。本文...

红薯
2011/01/24
2.6K
6
[分享]WeX5中input拍照上传图片方法分享,可单图与多图

演示用,比较简陋,勿怪,方法简单! input被点击之后默认出现拍照,文档等选项,可以拍照上传,也可以选图库文件上传,也可以录像进行视频上传,自己对应修改文件类型判断就可以了 这些功能...

小次叶
2016/09/06
74
0

没有更多内容

加载失败,请刷新页面

加载更多

zk中选举Leader时的网络IO QuorumCnxManager解析

每台服务启动过程中,会启动一个QuorumCnxManager,负责各台服务器之间底层Leader选举过程中的网络通信 当集群中有服务器服务中断时,zk会重新选举leader 内部类 Message定义消息结构 包含了...

writeademo
16分钟前
2
0
使用mdBook 替代 gitbook。

###** 为什么要替代gitbook** gitbook 有个模板问题:如果md文件中有连续的大括号(比如:&{{父亲 40}}),gitbook会把{{ 父亲 40 }}中的父亲 40当做一个模板变量。如果这个变量不存在,会报...

王坤charlie
19分钟前
3
0
TL-A7HSAD采集卡硬件的处理器、NOR FLASH、DDR3

TL-A7HSAD是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的高速数据采集卡,可配套广州创龙TMS320C6655、TMS320C6657、TMS320C6678开发板使用。该采集卡包含1个双通道250MSPS*12Bit的高...

Tronlong创龙
31分钟前
3
0
项目启动报fastjson版本可能过低

进行项目启动的过程中,之前都正常,这次启动突然就失败了: 查看日志说的是版本过低,后来查看官方网站版本,替换了最新版本: 选择了最新版本的1.2.60,1.2.62尝试后都不行,后来查看网上搜...

aiChuang
31分钟前
3
0
McDonald’s is using Alexa and Google to accepting job applications

McDonald’s today announced a new initiative the fast food chain is calling the “Apply Thru,” in which owners of Amazon Alexa or Google Assistant devices can begin job applic......

wowloop
35分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部