html5+servlet文件上传
来源:互联网 发布:crt结束tomcat端口 编辑:程序博客网 时间:2024/06/04 01:01
1、index.jsp
<html><body><script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script><h2>Hello World!</h2><form id="uploadForm" name="uploadform" method="POST"> <input id="fileid" type="file" accept="text/plain" onchange="onfile(this)"><input type="reset" name="reset" style="display: none;" /></form><script type="text/javascript">var xhr;function onfile(file) {if (!/\.(txt)$/.test(file.value)) { alert("please upload txt..."); $("input[type=reset]").trigger("click"); return; } else { var fd = new FormData(); fd.append("fileToUpload", document.getElementById('fileid').files[0]); xhr = new XMLHttpRequest(); xhr.open("POST", "/WebTest/UploadServlet"); //xhr.setRequestHeader("Content-Type","charset=UTF-8"); xhr.send(fd); xhr.onreadystatechange = processResponse; } } function processResponse(){ if(xhr.readyState == 4){ //alert("upload data liu stop"); if(xhr.status == 200){ var infor = xhr.responseText; alert(infor); $("input[type=reset]").trigger("click"); } }} </script></body></html>
1)HTML5的 input:file上传类型控制:
accept:表示可以选择的文件MIME类型,多个MIME类型用英文逗号分开,常用的MIME类型见下表。
multiple:是否可以选择多个文件,多个文件时其value值为第一个文件的虚拟路径。
常用的accept:
后缀名 MIME名称*.3gpp audio/3gpp, video/3gpp*.ac3 audio/ac3*.asf allpication/vnd.ms-asf*.au audio/basic*.css text/css*.csv text/csv*.doc application/msword *.dot application/msword *.dtd application/xml-dtd *.dwg image/vnd.dwg *.dxf image/vnd.dxf*.gif image/gif *.htm text/html *.html text/html *.jp2 image/jp2 *.jpe image/jpeg*.jpeg image/jpeg*.jpg image/jpeg *.js text/javascript, application/javascript *.json application/json *.mp2 audio/mpeg, video/mpeg *.mp3 audio/mpeg *.mp4 audio/mp4, video/mp4 *.mpeg video/mpeg *.mpg video/mpeg *.mpp application/vnd.ms-project *.ogg application/ogg, audio/ogg *.pdf application/pdf *.png image/png *.pot application/vnd.ms-powerpoint *.pps application/vnd.ms-powerpoint *.ppt application/vnd.ms-powerpoint *.rtf application/rtf, text/rtf *.svf image/vnd.svf *.tif image/tiff *.tiff image/tiff *.txt text/plain *.wdb application/vnd.ms-works *.wps application/vnd.ms-works *.xhtml application/xhtml+xml *.xlc application/vnd.ms-excel *.xlm application/vnd.ms-excel *.xls application/vnd.ms-excel *.xlt application/vnd.ms-excel *.xlw application/vnd.ms-excel *.xml text/xml, application/xml *.zip aplication/zip *.xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
2)accept只能限制上传框中默认文件后缀名,用户仍然可以改成所有文件,这是就能上传其他后缀的文件,所以还需要前段校验:
if (!/\.(txt)$/.test(file.value))
2、后端servlet:
package cn.edu.nuc.servlet;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * Servlet implementation class UploadServlet */public class UploadServlet extends HttpServlet {private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public UploadServlet() { super(); // TODO Auto-generated constructor stub }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stub}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全 String inputPath = "D:\\test"; File file = new File(inputPath); System.out.println("test。。。。"); // 判断上传文件的保存目录是否存在 if (!file.exists() && !file.isDirectory()) { System.out.println(inputPath + "目录不存在,需要创建"); // 创建目录 file.mkdir(); } String filename = ""; // 消息提示 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中封装的是上传文件 // 得到上传的文件名称, filename = item.getName(); System.out.println(filename); if (filename == null || filename.trim().equals("")) { message = "上传失败[文件名空]"; continue; } // 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: // c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt // 处理获取到的上传文件的文件名的路径部分,只保留文件名部分 filename = filename .substring(filename.lastIndexOf("/") + 1); // 获取item中的上传文件的输入流 InputStream in = item.getInputStream(); // 创建一个文件输出流 FileOutputStream out = new FileOutputStream(inputPath + "/" + filename); // 创建一个缓冲区 byte buffer[] = new byte[1024 * 1024]; // 判断输入流中的数据是否已经读完的标识 int len = 0; // 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据 while ((len = in.read(buffer)) > 0) { // 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" // + filename)当中 out.write(buffer, 0, len); } out.flush(); // 关闭输入流 in.close(); // 关闭输出流 out.close(); // 删除处理文件上传时生成的临时文件 item.delete(); message = "文件上传成功!"; } } } catch (Exception e) { message = "文件上传失败!"; e.printStackTrace(); } /*request.setAttribute("message", message); request.getRequestDispatcher("/message.jsp").forward(request, response);*/ response.setCharacterEncoding("UTF-8"); response.getWriter().print(message);}}
0 0
- html5+servlet文件上传
- 在HTML5里用Ajax上传文件到Java Servlet
- html5图片上传【文件上传】
- HTML5文件上传
- html5 java 文件上传
- HTML5 文件上传
- HTML5 异步上传文件
- html5 进度条上传文件
- html5---上传文件
- html5 文件上传预览
- HTML5 文件上传示例
- html5 自定义文件上传
- html5异步上传文件
- html5 ajax文件上传
- HTML5文件上传
- html5 自定义文件上传
- html5 ajax文件上传
- html5多文件上传
- Java面试准备十五:数据库——索引
- POJ 3683 2-sat
- MySQL数据库下 delete from x where id=?会发生什么锁
- 计算机网络与Internet发展历史
- Python+Selenium框架设计篇之3-什么是POM
- html5+servlet文件上传
- 浮点数的二进制表示(IEEE 754标准)
- K-L变换实现图像压缩
- centos 中英文输入法切换
- 悲观锁与乐观锁
- MySQL,HDFS,HBase相似之处
- vscode编辑器插件总结
- Android 一个改善的okHttp封装库
- C语言的组成及一些基本术语概念