Maison php教程 PHP开发 Exemple simple de téléchargement de fichiers volumineux à l'aide du composant fileupload

Exemple simple de téléchargement de fichiers volumineux à l'aide du composant fileupload

Dec 29, 2016 pm 05:00 PM

1.FileUploadServlet.java文件,实现上传处理

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import java.util.Iterator;
import java.util.List;
 
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.FileUploadException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
 
public class FileUploadServlet extends HttpServlet
{
 private static final long serialVersionUID = 1L;
 
 public FileUploadServlet()
 {
 super();
 }
 
 protected void doGet(HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException
 {
 this.doPost(request, response);
 }
 
 protected void doPost(HttpServletRequest request,
 HttpServletResponse response) throws ServletException, IOException
 {
 
 final long MAX_SIZE = 2048 * 1024 * 1024;// 设置上传文件最大值为2G,可以改为更大
 // 允许上传的文件格式的列表
 final String[] allowedExt = new String[]
 { "exe","jpg","DT" };
 response.setContentType("text/html");
 // 设置字符编码为UTF-8, 统一编码,处理出现乱码问题
 response.setCharacterEncoding("UTF-8");
 
 // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
 DiskFileItemFactory dfif = new DiskFileItemFactory();
 
 // 用以上工厂实例化上传组件
 ServletFileUpload sfu = new ServletFileUpload(dfif);
 // 设置最大上传大小
 sfu.setSizeMax(MAX_SIZE);
 
 PrintWriter out = response.getWriter();
 // 从request得到所有上传域的列表
 List fileList = null;
 try
 {
 fileList = sfu.parseRequest(request);
 } catch (FileUploadException e)
 {// 处理文件尺寸过大异常
 if (e instanceof SizeLimitExceededException)
 {
 out.println("文件尺寸超过规定大小:" + MAX_SIZE + "字节<p />");
 out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");
 return;
 }
 e.printStackTrace();
 }
 // 没有文件上传
 if (fileList == null || fileList.size() == 0)
 {
 out.println("请选择上传文件<p />");
 out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");
 return;
 }
 //文件大小取两位小数
 DecimalFormat digit=new DecimalFormat("0.00");
 // 得到所有上传的文件
 Iterator fileItr = fileList.iterator();
 // 循环处理所有文件
 while (fileItr.hasNext())
 {
 FileItem fileItem = null;
 String path = null;
 double size = 0;
 // 得到当前文件
 fileItem = (FileItem) fileItr.next();
 // 忽略简单form字段而不是上传域的文件域(<input type="text" />等)
 if (fileItem == null || fileItem.isFormField())
 {
 continue;
 }
 
 // 得到文件的大小,K为单位并保留两位小数
 size = (double)fileItem.getSize()/1024;
 if ("".equals(path) || size == 0)
 {
 out.println("<html><head><title>上传处理界面</title></head>");
 out.println("请选择上传文件<p />");
 out.println("<a href=\"FileUpload.html\" target=\"_top\">返回</a>");
 out.println("</html>");
 return;
 }
 // 得到文件的完整路径
 path = fileItem.getName();
   
 // 得到去除路径的文件名
 String t_name = path.substring(path.lastIndexOf("\\") + 1);
 // 得到文件的扩展名(无扩展名时将得到全名)
 String t_ext = t_name.substring(t_name.lastIndexOf(".") + 1);
 // 拒绝接受规定文件格式之外的文件类型
 int allowFlag = 0;
 int allowedExtCount = allowedExt.length;
 for (; allowFlag < allowedExtCount; allowFlag++)
 {
 if (allowedExt[allowFlag].equals(t_ext))
 break;
 }
 if (allowFlag == allowedExtCount)
 {
 out.println("<html><head><title>上传处理界面</title></head>");
 out.println("请上传以下类型的文件<p />");
 for (allowFlag = 0; allowFlag < allowedExtCount; allowFlag++)
 out.println("*." + allowedExt[allowFlag]
 + "   ");
 out.println("<p /><a href=\"FileUpload.html\" target=\"_top\">返回</a>");
 out.println("</html>");
 return;
 }
 try
 {
 // 保存文件到服务器根目录下
 fileItem.write(new File("\\"+t_name));
 System.out.println(t_name);
 out.println("<html><head><title>上传处理界面</title></head>");
 out.println("文件名称为:" + path + "<br>");
 out.println("文件上传成功, 已保存为: " + t_name
 + "<br>"+" 文件大小: " + digit.format(size) + "K <p />");
 out.println("<a href=\"FileUpload.html\" target=\"_top\">继续上传</a>");
 out.println("</html>");
 } catch (Exception e)
 {
 e.printStackTrace();
 }
 }
 }
}
Copier après la connexion

2.FileUpload.html文件,实现上传页面。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="FileUploadServlet" method="post"
enctype="multipart/form-data">
<input type="file" size="30"
name="file01" /><br>
<pre class="brush:php;toolbar:false"> <input name="submit" type="submit" value="上传"> <input name="reset" type="reset" value="重置">
Copier après la connexion

3.配置web.xml文件中的的servlet和过滤器,过滤器解决上传文件名为中文时出现乱码。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<display-name>FileUploadServlet</display-name>
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>FileUploadServlet</servlet-class>
</servlet>
 
<servlet-mapping>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/FileUploadServlet</url-pattern>
</servlet-mapping>
 
<filter>
<filter-name>setCharacterEncoding </filter-name>
<filter-class>com.xulu.EncodingChange</filter-class>
<init-param>
<param-name>ignore </param-name>
<param-value>true </param-value>
</init-param>
 
<init-param>
<param-name>encoding </param-name>
<param-value>UTF-8 </param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncoding </filter-name>
<url-pattern>/* </url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
Copier après la connexion

4.过滤器文件EncodingChange.java和setCharacterEncoding.java分别如下,并且在根目录下的WEB-INF\classes\com\xulu文件夹中放入他它们编译生成的.class文件

package com.xulu;
 
import java.io.IOException;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class EncodingChange implements Filter
{
 protected String encoding = null;
 protected FilterConfig filterconfig = null;
 protected boolean ignore = true;
 
 public void destroy()
 {
 this.encoding = null;
 this.filterconfig = null;
 }
 
 public void doFilter(ServletRequest requests, ServletResponse responses,
 FilterChain chain) throws IOException, ServletException
 {
 // TODO Auto-generated method stub
 HttpServletRequest request = (HttpServletRequest) requests;
 HttpServletResponse response = (HttpServletResponse) responses;
 if (ignore || request.getCharacterEncoding() == null)
 {
 String encoding = selectEncoding(request);
 if (encoding != null)
 {
 request.setCharacterEncoding(encoding);
 request.getSession().getAttribute("Login_Student");
 request.getSession().getAttribute("Login_Teacher");
 request.getSession().getAttribute("Login_Admin");
 }
 }
 chain.doFilter(request, response);
 }
 
 public void init(FilterConfig filterconfig) throws ServletException
 {
 // TODO Auto-generated method stub
 this.filterconfig = filterconfig;
 this.encoding = filterconfig.getInitParameter("encoding");
 String value = filterconfig.getInitParameter("ignore");
 if (value == null)
 {
 this.ignore = true;
 } else if (value.equalsIgnoreCase("true"))
 {
 this.ignore = true;
 } else if (value.equalsIgnoreCase("yes"))
 {
 this.ignore = true;
 } else
 {
 this.ignore = false;
 }
 }
 
 public String selectEncoding(ServletRequest request)
 {
 return this.encoding;
 }
}
和
package com.xulu;
 
import java.io.IOException;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class setCharacterEncoding implements Filter{
protected String encoding=null;
protected FilterConfig filterconfig=null;
protected boolean ignore=true;
 
 
public void destroy() {
this.encoding=null;
this.filterconfig=null;
}
 
public void doFilter(ServletRequest requests, ServletResponse responses,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request=(HttpServletRequest)requests;
HttpServletResponse response=(HttpServletResponse)responses;
if(ignore||request.getCharacterEncoding()==null){
String encoding=selectEncoding(request);
if(encoding!=null){
request.setCharacterEncoding(encoding);
request.getSession().getAttribute("Login_Student");
request.getSession().getAttribute("Login_Teacher");
request.getSession().getAttribute("Login_Admin");
}
}
chain.doFilter(request, response);
}
 
public void init(FilterConfig filterconfig) throws ServletException {
// TODO Auto-generated method stub
this.filterconfig = filterconfig;
this.encoding = filterconfig.getInitParameter("encoding");
String value = filterconfig.getInitParameter("ignore");
if (value == null) {
this.ignore = true;
} else if (value.equalsIgnoreCase("true")) {
this.ignore = true;
} else if (value.equalsIgnoreCase("yes")) {
this.ignore = true;
} else {
this.ignore = false;
}
}
public String selectEncoding(ServletRequest request){
return this.encoding;
}
}
Copier après la connexion

5.在浏览器中就可以实现页面的上传了,访问http://localhost:8080/**/FileUpload.html就可以了。其中**为自己命名的web文件夹,如DoUpload,上面的文件都在该目录里,且DoUpload文件夹放在Tomcat的webapp文件夹下。

补充:在上述所有步骤之前需引入三个.jar文件,分别为commons-fileupload-1.2.1.jar,commons-io-1.4.jar和servlet-api.jar网上可以下载到

以上就是小编为大家带来的用fileupload组件实现的大文件上传简单实例的全部内容了,希望对大家有所帮助,多多支持PHP中文网~

更多用fileupload组件实现的大文件上传简单实例相关文章请关注PHP中文网!


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)