文件上传
来源:互联网 发布:查看网络连接没反应 编辑:程序博客网 时间: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
- 文件上传---文件上传
- 上传文件
- 文件上传
- 上传文件
- 文件上传
- 文件上传
- 上传文件
- 上传文件
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 文件上传
- 上传文件
- 文件上传
- 文件上传
- 常用汉字编码
- HDU1050 Moving Tables
- 详细设计怎样写呢
- 第十周练习 1009 进制转换
- iOS ---对json数组的解析
- 文件上传
- SVN备份还原
- 鹅鹅鹅
- Android TextView实现可暂停的跑马灯效果
- FormatMessage函数的用法
- maven核心,pom.xml详解
- 试着开始自己写点东西
- 【SSH项目实战】国税协同平台-16.登录过滤器
- 学习日记:ajax的产生的背景、原理、特点与应用