文件上传

来源:互联网 发布:查看网络连接没反应 编辑:程序博客网 时间:2024/06/05 11:11

文件上传


步骤:

    step1,给表单设置enctype="multipart/form-data".(http协议的要求)并且表单只能使用post方式提交。

    step2,在服务器端,不能使用request.getParameter方法。

    此时,需要调用request.getInputStream获得一个InputStream,然后,分析这个流获得数据。一般使用一些工具来分析这个流(比如,apache提供的file-upload.jar)。


一、用到的jar包

二、jsp文件代码

<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%><html><head></head><body><form action="fileupload" method="post" enctype="multipart/form-data"><fieldset><legend>上传文件</legend>用户名:<input name="username"><br/>照片:<input type="file" name="file1"/><br/><input type="submit" value="提交"></fieldset></form></body></html>

三、servlet代码

package web;import java.io.File;import java.io.IOException;import java.util.List;import javax.servlet.ServletContext;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;public class FileUploadServlet extends HttpServlet {public void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//step1,创建一个DiskFileItemFactory对象,该对象为解析//器提供解析时的缺省的配置DiskFileItemFactory dfif = new DiskFileItemFactory();//step2,创建解析器ServletFileUpload sfu = new ServletFileUpload(dfif);//step3,使用解析器来解析//解析器会调用request.getInputStream获的一个流,然后//分析这个流,并且将分析的结果封装到FileItem对象里面。//一个FileItem对象封装了一个表单域中的所有数据。try {List<FileItem> items = sfu.parseRequest(request);System.out.println(items.size());//只需要遍历items集合就可以访问表单中的每一个//表单域的数据。for(int i=0;i<items.size();i++){FileItem curr = items.get(i);if(curr.isFormField()){//普通表单域String fieldname = curr.getFieldName();System.out.println("fieldname:"+fieldname);String  username = curr.getString();System.out.println("username:"+username);}else{//上传文件域//把用户上传的文件保存到upload文件夹ServletContext sctx = getServletContext();//String getRealPath(String path) -- path相对该应用的路径//依据逻辑路径获得实际部署的物理路径String path = sctx.getRealPath("upload");System.out.println("path:"+path);//下面两行为测试代码//String path1 = sctx.getRealPath("a");//System.out.println("path1:"+path1);//获得文件名String filename = curr.getName();File file = new File(path+File.separator+filename);curr.write(file);}}} catch (Exception e) {e.printStackTrace();}}}

具体细节及解析见代码



0 0
原创粉丝点击