博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet处理文件上传
阅读量:6847 次
发布时间:2019-06-26

本文共 3410 字,大约阅读时间需要 11 分钟。

hot3.png

网页端:

名称:
年龄:
上传:

Servlet:

package wodeschool.test;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.Arrays;import java.util.Iterator;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletInputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;public class UploadServlet extends HttpServlet{	private static final long serialVersionUID = 1L;	protected void doPost(HttpServletRequest request,HttpServletResponse response)	throws ServletException,IOException	{		request.setCharacterEncoding("UTF-8");//设置请求数据的编码方式		process(request,response);//文件的处理	}	private void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {		response.setContentType("text/html;charset=UTF-8");		String name=request.getParameter("name");//获取普通数据name和age		String age=request.getParameter("age");		response.getWriter().write("name:"+name+"
age:"+age+"
"+"
"); Part part=request.getPart("file");//getPart()用于上传单文件,getParts()用于上传多个文件。 saveUpload(part);//文件保存 response.getWriter().write("

文件上传成功

"); } private void saveUpload(Part part) { // TODO Auto-generated method stub String fileName=getFileName(part);//获取文件名 fileName="school_"+System.nanoTime()+"_"+fileName;//防止文件重名 ServletContext cxt=getServletContext(); String realPath= cxt.getRealPath("/");//得到当前路径 File file=new File(realPath+"upload"); if(!file.exists()){ file.mkdir(); } File upFile=new File(file,fileName); FileOutputStream fos=null; InputStream is=null; byte[] buf=new byte[1024]; int flag=-1; try { fos=new FileOutputStream(upFile); is=part.getInputStream(); while((flag=is.read(buf,0,1024))!=-1) { fos.write(buf, 0, flag); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch(IOException e) { e.printStackTrace(); } finally { if(fos!=null){ try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(is!=null){ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } private String getFileName(Part part) { String header= part.getHeader("content-disposition"); String[] arr=header.split("filename="); return arr[arr.length-1].replace("\"", ""); }}

xml:也可以直接用注解的方式

Upload
wodeschool.test.UploadServlet
1000000
1001024
4096
Upload
/upload

一下为笔记部分:

envtype="multipart/form-data"是上传二进制数值的意思,如果删除它就是一个普通的表单,如果通过request.getParameter(String name)

获取值得话,获取的只是文件的名称。

//获取文件名称的方式:创建一个方法
private String getFileName(Part part){
    //通过文件头
    Interator<String> it=part.getHeaderNames().iterator;
    while(it.hasNext())//通过迭代器看文件头的内容
    {
        String name=it.mext();
        System.out.println(name+part.getHeader(name));
    }

//分割字符串:

String arr=header.split("filename=");//切割成数组
String fileName=arr[srr.length-1].replace("\"","");获取最后一个元素的值并去掉双引号。

return fileName;

}

 

转载于:https://my.oschina.net/wang520/blog/715365

你可能感兴趣的文章
【javascript】解决setTimeout不能传参的问题
查看>>
BULK INSERT如何将大量数据高效地导入SQL Server
查看>>
第一次实验报告
查看>>
正则匹配replace替换重复字符串
查看>>
[Linux学习]chattr配置文件隐藏属性及lsattr查看隐藏属性
查看>>
mybatis大数据提交和更新,数据SQL语句批量提交数据库
查看>>
熟练掌握HDFS的Shell访问
查看>>
每天一个小算法(Shell Sort2)
查看>>
Java数据结构与算法(7) - ch05双向链表(Double List)
查看>>
aliyun 镜像
查看>>
fiddler 教程
查看>>
javascript 获取url参数值
查看>>
关于使用public class 和 class声明类的区别
查看>>
MySQL之中文乱码问题
查看>>
【offer收割机必备】我简历上的Java项目都好low,怎么办?
查看>>
小白的进阶之路17
查看>>
异常处理
查看>>
java查询几个菜单下的所有下级菜单
查看>>
Buildroot lmbench使用方法
查看>>
java中的包装类
查看>>