文件上传功能实现(一)

文件上传:

①上传前的准备工作(准备一个注册的表单页面)

创建一个文件上传的控件,点击这个控件就可以选择需要上传的文件了

<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需要修复,在后面会有详细的解决方案

时间: 2024-11-05 16:44:31

文件上传功能实现(一)的相关文章

达到HTTP合约Get、Post和文件上传功能——采用WinHttp介面

于<采用WinHttp实现HTTP协议Get.Post和文件上传功能>一文中,我已经比較具体地解说了怎样使用WinHttp接口实现各种协议. 在近期的代码梳理中,我认为Post和文件上传模块能够得到简化,于是差点儿重写了这两个功能的代码.由于Get.Post和文件上传功能的基础(父)类基本没有修改,函数调用的流程也基本没有变化,所以本文我将重点解说修改点. (转载请指明出于breaksoftware的csdn博客) 首先我改动了接口的字符集.之前我都是使用UNICODE作为接口參数类型,当中一

实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现

之前我们已经详细介绍了WinHttp接口如何实现Http的相关功能.本文我将主要讲解如何使用libcurl库去实现相关功能.(转载请指明出于breaksoftware的csdn博客) libcurl在http://curl.haxx.se/libcurl/有详细的介绍,有兴趣的朋友可以去读下.本文我只是从实际使用的角度讲解其中的一些功能. libcurl中主要有两个接口类型:CURL和CURLM.CURL又称easy interface,它接口简单.使用方便,但是它是一个同步接口,我们不能使用它

实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现

在<使用WinHttp接口实现HTTP协议Get.Post和文件上传功能>一文中,我已经比较详细地讲解了如何使用WinHttp接口实现各种协议.在最近的代码梳理中,我觉得Post和文件上传模块可以得到简化,于是几乎重写了这两个功能的代码.因为Get.Post和文件上传功能的基础(父)类基本没有改动,函数调用的流程也基本没有变化,所以本文我将重点讲解修改点.(转载请指明出于breaksoftware的csdn博客) 首先我修改了接口的字符集.之前我都是使用UNICODE作为接口参数类型,其中一个

文件上传功能的实现

一:文件上传功能 先要在在index.jsp的界面上初始化一个表单. 代码如下: <body> <form enctype="multipart/form-data" action="<%=path%>/1.jsp" method="post"> 姓名:<input type="text" name="username"/> 选择文件:<input ty

AEAI Miscdp文件上传功能使用心得

1.概述 在实际项目中,我们常常可以遇到这样的情况:上传头像.上传图片.上传视频.上传音乐.上传作业,等等-那么如何使用MiscdpStudio对这类功能进行开发,就成了MiscdpStudio使用者必须掌握的技能之一. 接下来,我就对单表操作模型,简单介绍一下如何对文件进行上传.这里,我们主要使用的是fileupload组件,当然,这也是开发平台中自带的组件. 2.创建数据表 在这里,我们需要在数据库创建两个表,一个是业务表.另一个是关联表.关联表里有三个字段:逻辑主键.业务标识字段.附件标识

iOS 的 Safari 文件上传功能详解

iOS 6 给 Safari 浏览器带来的另外一个功能是文件上传,终于 Safari 终于支持 input 输入框的文件类型了,并且还支持 HTML媒体捕获(HTML Media Capture). 上传单张图片或者视频 <input type="file"> 可以选择直接拍照或者摄影,也可以从相册中选取.选好之后,iOS 上的 Safari 和其他浏览器不同是它显示图片的截图,而不是图片的临时名称. 上传多张图片或者视频 如果你想一次上传多张图片,可以使用 HTML5 一

Spring MVC 文件上传功能详解

前言 在Spring MVC中实现文件上传功能并不复杂,前端使用HTML语法,后端使用特定抽象.参考Spring Boot相关文档即可.本文主要讲解常见资料忽略的两个问题: 文件上传错误 链接重置问题 版本:Spring Boot 1.5x 文件上传错误 一个关注点是如何处理文件上传期间发生的错误,错误主要分为两类: IOException 文件读取或写入错误. MultipartException 上传文件时,超过文件大小上限所触发的异常. IOException 只需要在Controller

文件/大文件上传功能实现(JS+PHP)全过程

文件/大文件上传功能实现(JS+PHP) 参考博文:掘金-橙红年代 前端大文件上传 路漫漫 其修远 PHP + JS 实现大文件分割上传 本文是学习文件上传后的学习总结文章,从无到有实现文件上传功能,前端小白写的代码不是最优,如果有错误的地方请多多指教,如果本文对你有所帮助,深感荣幸. 近期公司的项目中,涉及到上传大文件的问题,大文件上传用普通表单上传时出现的问题是,无法断点续存,一但中途中断上传,就要重头开始,这很明显不是我们想要的,所以经过一番查询,学习了一下大文件分割上传的方法.并且使用简

PHP文件上传功能 -- 多文件上传

这一节内容主要介绍PHP上传文件的多文件上传功能. 只要以数组形式来命名表单中的文件上传标记,即可实现多个文件同时上传. 下面我们来看一个例子: --------------------------------------------------------------------- <form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF']?>" method="