commons-fileupload实现文件的上传

    1.准备两个JAR包: commons-fileupload-1.3.3.jar 和 commons-io-2.5.jar,(直接百度上就能找到)


    2.开始写代码

          a.   上传文件的表单,即JSP页面

        <form action="<%=basePath%>servlet/FileUploadServlet" method="post" 

                    name="uploadform" enctype="multipart/form-data">

    mtl文件:<input name="x" size="40" type="file">
    obj文件:<input name="y" size="40" type="file"><br>
    txt内容1:<input type="text" name="y" size="80"><br>
    txt内容2:<input type="text" name="y" size="80"><br>
    <input type="submit" value="开始上传" name="upload">

    </form>

                * 要同时上传多个文件的话,就多写几个<input type="file"/>

                * 支持一个表单同时上传文件和文字内容


          b.  在src目录下新建一个Servlet:

                右键src --> New --> Servlet


        输入Servlet名字,勾选doGet()和doPost()方法 --> Finish【doGet()和doPost()方法也可以只勾选一个,一般勾选doPost(),具体情况看你JSP页面表单的提交方法是GET还是POST】

           c.    配置web.xml文件

<servlet>
    <servlet-name>FileUploadServlet</servlet-name><!-- 可以任意取 ,但是两个servlet-name需要一致-->
    <servlet-class>FileUploadServlet</servlet-class><!-- Servlet类的路径   即:包名.类名-->
  </servlet>
  <servlet-mapping>
    <servlet-name>FileUploadServlet</servlet-name><!-- 和上面的serlvet-name相同 -->
    <url-pattern>/servlet/FileUploadServlet</url-pattern><!-- 该值是JSP页面中表单的提交路径,即action的值 -->
  </servlet-mapping>

              d.    编写Servlet

            如果你添加了doGet()和doPost()两个方法,则在其中一个方法中调用另一个方法,借着在被调用的方法中编写代码

public class FileUploadServlet extends HttpServlet {

private File uploadPath; //设置文件上传路径
private File tempPath; //当文件过大时,需要设置一个临时保存路径
private static final int DEFUALT_SIZE_THRESHOLD=4096; //当超过该大小时,文件存储为临时文件

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//设置编码为UTF-8
request.setCharacterEncoding("UTF-8");
response.setContentType("utf-8");


DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(DEFUALT_SIZE_THRESHOLD); //超过该大小,则存储为临时文件
factory.setRepository(tempPath);

ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1000000*20); //设置上传文件的最大值
try {
List<FileItem> fileItems = upload.parseRequest(request);
String itemNo = "";

//为了防止重复文件名以及文件名称,基于文件上传时间来生成随机文件名以及文件名称
String filePackName = getRadomFileName();
File file = new File(uploadPath+"\\"+filePackName);
file.mkdirs(); //在upload文件夹或temp文件夹下新建一个文件夹用于存放新上传的文件


for(Iterator iter = fileItems.iterator(); iter.hasNext();){
FileItem item = (FileItem) iter.next();

//普通表单输入域
if(item.isFormField()){
itemNo = item.getString();
System.out.println("普通表单内容:"+itemNo);
}

//上传文件表单输入域
if(!item.isFormField()){
String fileName = item.getName(); //获取文件名称
long size = item.getSize(); //获取文件大小
System.out.println("文件名称:"+fileName+";文件大小:"+size);
if((fileName == null || fileName.equals("")) && size == 0){//判断文件名是否为空
continue;
}
//截取地址字符串
System.out.println("提交地址:"+fileName);
//fileName = fileName.substring(fileName.lastIndexOf("\\")+1,fileName.length());


item.write(new File(uploadPath+"\\"+filePackName,fileName));//将上传的文件写入对应的文件夹

System.out.println("文件上传成功");

                                        System.out.println("文件成功保存到"+uploadPath+"\\"+filePackName+"目录下");

}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//基于当前时间生成随机文件夹名以及文件名
public static String getRadomFileName(){

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
Date date = new Date();
String str = simpleDateFormat.format(date);

Random random = new Random();
int rannum = (int)(random.nextDouble()*(99999999-10000000+1))+10000000;//生成一个8位的随机数

return rannum+str;
}

public void init(){
uploadPath = new File(getServletContext().getRealPath("upload"));
//判断目录是否存在
if(!uploadPath.exists()){
//创建目录
uploadPath.mkdir();
System.out.println("目录"+uploadPath+"创建成功");
}
System.out.println("目录"+uploadPath+"存在");
//临时目录
tempPath = new File(getServletContext().getRealPath("temp"));
if(!tempPath.exists()){
tempPath.mkdir();
System.out.println("临时目录"+tempPath+"创建成功");
}
System.out.println("临时目录"+tempPath+"存在");
}
}

            以上就是使用commons-fileupload实现文件上传的内容。【供个人学习使用】






猜你喜欢

转载自blog.csdn.net/qq_34584694/article/details/80455086