文件上传
来源:互联网 发布:js鼠标滚轮放大图片 编辑:程序博客网 时间:2024/05/29 15:56
首先,加入Apache的commons-fileupload文件上传组件的相关jar包:
commons-fileupload-xxx.jar
Commons-io-xxx.jar
前端页面:
<body> <form action="${pageContext.request.contextPath}/servlet/UploadHandleServlet" enctype="multipart/form-data" method="post"> 上传文件:<input type="file" name="file1"><br/> <input type="submit" value="提交"> </form></body>/**重点儿是给form表单增加enctype="multipart/form-data"属性*/
后台处理:
public class UploadServlet extends HttpServlet{ public void doPost(HttpServletRequest request,HttpServletResponse response){ //得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全 String realPath = this.getServletContext().getRealPath("/WEB-INF/upload"); File file = new File(realPath); if(!file.exists() || !file.isDirectory()){ System.out.println(realPath+"该目录不存在,需要创建!"); file.mkdir();//创建目录 } //消息提示 String message = ""; //使用Apache文件上传组件处理文件上传 //1、创建一个DiskFileItemFactory对象工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //2、创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); //3、解决上传文件名的乱码问题 upload.setHeaderEncoding("UTF_8"); //4、判断提交上来的数据是否是上传文件表单的数据 if(!ServletFileUpload.isMultipartContent(request)){ System.out.println("请求不是格式不正确!"); return; } //使用ServletFileUpload解析器解析上传的数据,解析返回结果是一个List<FileItem>的集合 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); //注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt //处理获取到的上传文件的文件名的路径部分,只保留文件名部分 filename = filename.subString(filename.lastIndexOf("\\")+1); //获取item中的上传文件的输入流 InputStream in = item.getInputStream(); //创建一个字节文件输出流 OutputStream os = new FileOutputStream(realPath+"\\"+filename); //创建一个字节输出缓冲区 byte[] buffer = new byte[1024]; 判断输入流中的数据是否已经读完的标识 int len = 0; //循环输入流中的数据读取到缓冲区中,(len=in.read(buffer))>0就表示in里面还有数据 while((len=in.read(buffer))>0){ //使用OutputStream输出流对象,将缓冲区的数据写入到指定的目录文件中 os.write(buffer,0,len); } //关闭流资源对象 in.close(); os.close(); //删除处理文件上传时生成的临时文件 item.delete(); message = "文件上传成功!"; } } response.setHeader("Content-type","text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); response.getWriter().write("文件上传成功!"); response.getWriter().flush(); }}
0 0
- 文件上传---文件上传
- 上传文件
- 文件上传
- 上传文件
- 文件上传
- 文件上传
- 上传文件
- 上传文件
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 上传文件
- 文件上传
- 文件上传
- printf()函数
- css基础1-业务要点
- ROS-Industrial Simple-Message 安装 etc.
- 创业总结
- 解析url
- 文件上传
- VC实现文件的上传下载 客户端
- iOS导航栏的隐藏方式
- 抓包工具Fiddler的使用教程(二十一):Fiddler tutorial – How to use Fiddler
- Oracle中如何查询CLOB字段类型的内容
- Dwr框架搭建以及配置文件详解
- iOS面试必看,最全梳理(二)
- UIPickerView注意点
- spring中redistemplate不能用通配符keys查出相应Key的问题