您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页Servlet处理文件上传

Servlet处理文件上传

来源:华拓科技网

网页端:

<form method="post" action="upload"  enctype="multipart/form-data">
名称:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
上传:<input type="file" name="file"><br/>
<input type="reset" value="取消">
<input type="submit" value="提交">
</form>

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("<strong>name:"+name+"<br/>age:"+age+"</strong>"+"<br/>");
		Part part=request.getPart("file");//getPart()用于上传单文件,getParts()用于上传多个文件。

		saveUpload(part);//文件保存
		response.getWriter().write("<h3>文件上传成功</h3>");
	}

	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:也可以直接用注解的方式

<servlet>
  <servlet-name>Upload</servlet-name>
  <servlet-class>wodeschool.test.UploadServlet</servlet-class>
  <multipart-config>
  <max-file-size>1000000</max-file-size>
  <max-request-size>1001024</max-request-size>
  <file-size-threshold>4096</file-size-threshold>
   </multipart-config>
  </servlet>
  <servlet-mapping>
  <servlet-name>Upload</servlet-name>
  <url-pattern>/upload</url-pattern>
  </servlet-mapping>


一下为笔记部分:

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务