ajax 上传文件 demo

页面代码:

<body style="margin: 0px auto;">
		文件:<input type="file" name="file" id="file">
		<input type="button" id="btn" value="提交">
		<div id="img">
		
		</div>
	</body>

$(function() {
	$("#btn").click(function() {
		uploadFile('file');
	});
});

function uploadFile(id) {
	var pathName = $("#" + id).val();
	if (pathName == "") {
		alert('请选择文件!');
		return;
	} else {
		$.ajaxFileUpload({
			url : 'index.do?method=uploadFile',
			type : 'POST',
			secureuri : false,// 一般设置为false
			fileElementId : [ "" + id + "" ],// 文件上传空件的id属性
//			contentType : 'application/json;charse=UTF-8',
			dataType : 'html',
			success : function(data, status) // 服务器成功响应处理函数
			{
				var s =data.replace('<pre style="word-wrap: break-word; white-space: pre-wrap;">','');
				s = s.replace('</pre>','');
				var s1= eval("("+s+")");
				console.info(s1.filePath);
				var path = BASE_PATH+"/uploadimg/thumbnail/"+s1.filePath;
				$("#img").html('<img alt="" src="'+path+'">');
				
			},
			error : function(data, status, e)// 服务器响应失败处理函数
			{
				alert("服务错误!");
			}
		});
	}
}
上传代码 大同小异

这里随便考了一个:能用

public void upload(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
		String filePaths="";
		String savePath = this.getServletContext().getRealPath(
				"/WEB-INF/upload");
		File file = new File(savePath);
		// 判断上传文件的保存目录是否存在
		if (!file.exists() && !file.isDirectory()) {
			System.out.println(savePath + "目录不存在,需要创建");
			// 创建目录
			file.mkdir();
		}
		// 消息提示
		String message = "";
		try {
			// 使用Apache文件上传组件处理文件上传步骤:
			// 1、创建一个DiskFileItemFactory工厂
			DiskFileItemFactory factory = new DiskFileItemFactory();
			// 2、创建一个文件上传解析器
			ServletFileUpload upload = new ServletFileUpload(factory);
			// 解决上传文件名的中文乱码
			upload.setHeaderEncoding("UTF-8");
			// 3、判断提交上来的数据是否是上传表单的数据
			if (!ServletFileUpload.isMultipartContent(request)) {
				// 按照传统方式获取数据
//				return;
			}
			// 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
			List<FileItem> list = upload.parseRequest(request);
			for (FileItem item : list) {
				// 如果fileitem中封装的是普通输入项的数据
				if (item.isFormField()) {
					String name = item.getFieldName();
					// 解决普通输入项的数据的中文乱码问题
					String value = item.getString("UTF-8");
					// value = new String(value.getBytes("iso8859-1"),"UTF-8");
					System.out.println(name + "=" + value);
				} else {// 如果fileitem中封装的是上传文件
						// 得到上传的文件名称,
					String filename = item.getName();
					System.out.println(filename);
					if (filename == null || filename.trim().equals("")) {
						continue;
					}
					// 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:
					// c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
					// 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
					filename = filename
							.substring(filename.lastIndexOf("\\") + 1);
					// 获取item中的上传文件的输入流
					InputStream in = item.getInputStream();
					// 创建一个文件输出流
					filePaths =savePath + "\\"+System.currentTimeMillis()+"_"+filename;
					FileOutputStream out = new FileOutputStream(filePaths);
							
					//将存放路径存到数据库
//					pictureService.upLoad(savePath + "\\"
//							+System.currentTimeMillis()+"_"+filename);
					// 创建一个缓冲区
					byte buffer[] = new byte[1024];
					// 判断输入流中的数据是否已经读完的标识
					int len = 0;
					// 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
					while ((len = in.read(buffer)) > 0) {
						// 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\"
						// + filename)当中
						out.write(buffer, 0, len);
					}
					// 关闭输入流
					in.close();
					// 关闭输出流
					out.close();
					// 删除处理文件上传时生成的临时文件
					item.delete();
					message = "文件上传成功!";
				}
			}
		} catch (Exception e) {
			message = "文件上传失败!";
			e.printStackTrace();

		}
		
		response.getWriter().write(filePaths);
		response.getWriter().flush();
		response.getWriter().close();
	}

通过
$.ajaxFileUpload 上传文件非常方便 但需要 引入<pre name="code" class="html">ajaxFileUpload.js

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值