码迷,mamicode.com
首页 > Web开发 > 详细

文件上传功能实现(一)

时间:2016-05-09 14:13:37      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

文件上传:
①上传前的准备工作(准备一个注册的表单页面)
    创建一个文件上传的控件,点击这个控件就可以选择需要上传的文件了
    <form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="headimg" />
 
     注意:上传时表单的上传类型必须是:multipart/form-data
             上传的method必需是POST
 
当设置了multipart/form-data的时候,就不会对字符进行编码了,而Servlet中拿到的值与数据必需是经过
编码的值,所以要解决这个问题,就需要对上传的东西进行字符编码.
 
②准备一个上传的Servlet,到后台接收传过来的普通表单数据 与 文件(二进制)
 
③导入相应的FileUpload jar包 (commons-fileupload-1.2.2.jar ,commons-io-1.4.jar)
    这两个包的作用,前者可以让我们通过教程学会文件的上传功能实现,后面的这个包里面的   

  FilenameUtils 里面得工具可以帮我们完善这个文件上传的功能修复BUG     

④使用jar包
打开jar包找到index.html
小提示:在首页总有一个开发指南(User Guide)或者快速上手(Quick Start )等着你
 
⑤根据快速入门解析完成一个文件上传的功能
代码:
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
        //创建一个工厂解析这个请求,得到的是一个集合,这个集合装的就是一个请求对象,封装的就是每一条请求数据
        try {
            // 创建一个工厂
            FileItemFactory factory = new DiskFileItemFactory();
            
            // 创建一个文件上传的处理器
            ServletFileUpload upload = new ServletFileUpload(factory);
            
            //解析这个请求:解析完之后咱们可以拿到一个FileItem的集合
            List < FileItem > items = upload.parseRequest(req);
            
            //通过遍历集合可以拿到上传的文件的属性值,包括属性名,值..
            for (FileItem fileItem : items) {                
                //上面的测试可以看输出,普通控件和file控件的处理方式是要区别对待的
                if(fileItem.isFormField()){
                    //代表是一般表单,用一般表单的处理方式解决即可                
                }else{
                    //拿到上传文件的名称(有ie版本问题)
                    //String upname=fileItem.getName();   
                           
                    //有重名文件上传的问题
                    String upname = FilenameUtils.getName(fileItem.getName());
                    
                    //有保存路路径的问题有的操作系统没有盘符
                    File uploadFile = new File("D:/",upname);
                                        
                    //将本地的文件写到服务器中
                    fileItem.write(uploadFile);
                }                
            }            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }        
    }
}
 
说明:这个只能实现本地上传,还有许多bug需要修复,在后面会有详细的解决方案
 
 

文件上传功能实现(一)

标签:

原文地址:http://www.cnblogs.com/yanqinmumu/p/5473573.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!