文件上传简易版
2016-07-22 17:21
260 查看
以下是index.jsp的核心代码:
以上值得注意的一点是:enctype=“multipart/form-data”这一句是必须的,不填默认为enctype=”application/x-www-form-urlencode”。
后台servlet核心代码:
“`
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//※下面这句解决上传文件名的中文乱码
//注意,下面这句设置中文,如果是“multipart/form-data”表单,可以设置其中file组件的文件名,但对其中的普通表单组件无效。
//注意,下面这句设置中文,如果是我们以前用的“application/x-www-form-urlencoded”表单,可以设置其中的普通表单组件。
request.setCharacterEncoding(“utf-8”);
}
还有个细节,这里后台引用了Apache的两个组件来实现文件上传那功能,commons-io.jar和conmons-fileupload.jar
<form action="<%= request.getContextPath()%>/upload" method="post" enctype="multipart/form-data"> 文件1:<input type="file" name="file"/><br/> 文件1的说明:<input type="text" name="desc1"/><br/> 文件2:<input type="file" name="file2"/><br/> 文件2的说明:<input type="text" name="desc2"/><br/> <input type="submit" value="提交"/> </form>
以上值得注意的一点是:enctype=“multipart/form-data”这一句是必须的,不填默认为enctype=”application/x-www-form-urlencode”。
后台servlet核心代码:
“`
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//※下面这句解决上传文件名的中文乱码
//注意,下面这句设置中文,如果是“multipart/form-data”表单,可以设置其中file组件的文件名,但对其中的普通表单组件无效。
//注意,下面这句设置中文,如果是我们以前用的“application/x-www-form-urlencoded”表单,可以设置其中的普通表单组件。
request.setCharacterEncoding(“utf-8”);
//先获取所接收文件要保存的路径 String path = getServletContext().getRealPath("/imgs"); //文件上传需要临时目录(如果不指定,那么该目录就是tomcat/temp ) File tempDir = new File("d:/a"); DiskFileItemFactory fileFactory = new DiskFileItemFactory(1024*8, tempDir);//创建用于解析文件的工厂类,同时设置缓冲区的位置和大小 //※※※※思路的入口 ServletFileUpload upload = new ServletFileUpload(fileFactory); upload.setFileSizeMax(1024*1024*5);//设置每个文件最大为5M upload.setSizeMax(1024*1024*8);//所有上传文件大小之和的最大值,此处设最多能上传8M //以下开始解析 try { List<FileItem> list= upload.parseRequest(request); for(FileItem fi:list){ if(fi.isFormField()){//普通表单组件,如:<input type="text" name="desc1"/> String str = fi.getString("utf-8");//※以指定编码的方式获取,来解决普通表单组件的中文乱码问题 System.out.println("普通表单组件..."+str); }else{//文件组件 String fileName = fi.getName();//文件名 System.out.println("fileName:"+fileName); //由于上传的文件“名字”可能会有中文,而服务器目录当中的资源名称不能够用中文,因此要把它转换成非中文的文件名(要考虑文件名不能重复) String uuid = UUID.randomUUID().toString().replace("-", ""); String ext = fileName.substring( fileName.lastIndexOf("."));//截取文件的扩展名: .jpg String newFileName = uuid+ext; //真正的文件内容在 fi.getInputStream() 当中 FileUtils.copyInputStreamToFile(fi.getInputStream(), new File(path+"/"+newFileName)); } } } catch (FileUploadException e) { e.printStackTrace(); } }
}
还有个细节,这里后台引用了Apache的两个组件来实现文件上传那功能,commons-io.jar和conmons-fileupload.jar
相关文章推荐
- ASP实现文件上传的方法
- php轻松实现文件上传功能
- PHP文件上传问题汇总(文件大小检测、大文件上传处理)
- .net文件上传时实现通过文件头确认文件类型的方法
- asp.net 文件上传与刷新与asp.net页面与iframe之间的数据传输
- ASP的chr(0)文件上传漏洞原理和解决方法介绍
- asp.net上传文件到数据库的解决方案
- javascript实现校验文件上传控件实例
- ajax 异步上传带进度条视频并提取缩略图
- jQuery插件实现文件上传功能(支持拖拽)
- jQuery实现文件上传进度条特效
- JQuery fileupload插件实现文件上传功能
- jQuery文件上传控件 Uploadify 详解
- 分享20多个很棒的jQuery 文件上传插件或教程
- jquery插件ajaxupload实现文件上传操作
- Web Uploader文件上传插件使用详解
- Jquery和BigFileUpload实现大文件上传及进度条显示
- jquery插件uploadify实现带进度条的文件批量上传
- 基于Ajax技术实现文件上传带进度条
- 原生ajax和iframe框架实现图片文件上传的两种方式