javaweb实现文件上传示例代码

本文实例为大家分享了javaweb文件下载的具体实现代码,供大家参考,具体内容如下

文件上传示例

注意:jsp页面编码为"UTF-8"

文件上传的必要条件

1.form表单,必须为POST方式提交

2.enctype="multipart/form-data"

3.必须有<input type="file" />

前端jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>" rel="external nofollow" >

 <title>My JSP 'index.jsp' starting page</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" >
 -->
 </head>
 <script type="text/javascript">
  function addFile(){
   var div1=document.getElementById("div1");
   div1.innerHTML+="<div><input type='file' /><input type='button' value='删除' onclick='deleteFile(this)' /> <br/></div>";

  }
  function deleteFile(div){
   //他的爷爷删除他的爸爸
   div.parentNode.parentNode.removeChild(div.parentNode);

  }
 </script>
 <body>
  <form action="${pageContext.request.contextPath }/servlet/upLoadServlet" method="post" enctype="multipart/form-data">
  文件的描述:<input type="text" name ="description" /><br/>
  <div id="div1">
   <div>
   <input type="file" name ="file" /><input type="button" value="添加" onclick="addFile()" /><br/>
   </div>
  </div>
   <input type="submit" />
  </form>
 </body>
</html>

实现文件上传的servlet

package com.learning.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;

/**
 * Servlet implementation class UpLoadServlet
 */
@WebServlet("/servlet/upLoadServlet")
public class UpLoadServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;

 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doGet(request, response);
 }

 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  */
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  //文件上传
  //判断是否支持文件上传
  boolean isMultipartContent = ServletFileUpload
    .isMultipartContent(request);
  if (!isMultipartContent) {
   throw new RuntimeException("不支持");
  }

  // 创建一个DiskFileItemfactory工厂类
  DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
  // 创建一个ServletFileUpload核心对象
  ServletFileUpload fileUpload=new ServletFileUpload(diskFileItemFactory);
  //设置中文乱码
  fileUpload.setHeaderEncoding("UTF-8");
  //设置一个文件大小
  fileUpload.setFileSizeMax(1024*1024*3); //大小为3M
  //设置总文件大小
  //fileUpload.setSizeMax(1024*1024*10);//大小为10M

  try {
   //fileload解析request请求,返回list<FileItem>集合
   List<FileItem> fileItems = fileUpload.parseRequest(request);
   for (FileItem fileItem : fileItems) {
    if (fileItem.isFormField()) {
     //是文本域 (处理文本域的函数)
     processFormField(fileItem);
    }else {
     //文件域 (处理文件域的函数)
     processUpLoadField1(fileItem);
    }
   }

  } catch (FileUploadException e) {
   e.printStackTrace();
  }

 }

 /**
  * @param fileItem
  *
  */
 private void processUpLoadField1(FileItem fileItem) {

  try {
   //获得文件读取流
   InputStream inputStream = fileItem.getInputStream();

   //获得文件名
   String fileName = fileItem.getName();

   //对文件名处理
   if (fileName!=null) {
    fileName.substring(fileName.lastIndexOf(File.separator)+1);

   }else {
    throw new RuntimeException("文件名不存在");
   }

   //对文件名重复处理
//   fileName=new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
   fileName=UUID.randomUUID()+"_"+fileName;

   //日期分类
   SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
   String date = simpleDateFormat.format(new Date());
   //创建目录
   File parent=new File(this.getServletContext().getRealPath("/WEB-INF/upload/"+date));
   if (!parent.exists()) {
    parent.mkdirs();
   }

   //上传文件
   fileItem.write(new File(parent, fileName));
   //删除临时文件(如果上传文件过大,会产生.tmp的临时文件)
   fileItem.delete();

  } catch (IOException e) {
   System.out.println("上传失败");
   e.printStackTrace();
  } catch (Exception e) {

  }

 }

 /**
  * @param fileItem
  */
 //文件域
 private void processUpLoadField(FileItem fileItem) {

  try {
   //获得文件输入流
   InputStream inputStream = fileItem.getInputStream();

   //获得是文件名字
   String filename = fileItem.getName();
   //对文件名字处理
   if (filename!=null) {
//    filename.substring(filename.lastIndexOf(File.separator)+1);
    filename = FilenameUtils.getName(filename);
   }

   //获得路径,创建目录来存放文件
   String realPath = this.getServletContext().getRealPath("/WEB-INF/load");

   File storeDirectory=new File(realPath);//既代表文件又代表目录
   //创建指定目录
   if (!storeDirectory.exists()) {
    storeDirectory.mkdirs();
   }
   //防止文件名一样
   filename=UUID.randomUUID()+"_"+filename;
   //目录打散 防止同一目录文件下文件太多,不好查找

   //按照日期分类存放上传的文件
   //storeDirectory = makeChildDirectory(storeDirectory);

   //多级目录存放上传的文件
   storeDirectory = makeChildDirectory(storeDirectory,filename);

   FileOutputStream fileOutputStream=new FileOutputStream(new File(storeDirectory, filename));
   //读取文件,输出到指定的目录中
   int len=1;
   byte[] b=new byte[1024];
   while((len=inputStream.read(b))!=-1){
    fileOutputStream.write(b, 0, len);
   }
   //关闭流
   fileOutputStream.close();
   inputStream.close(); 

  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 //按照日期来分类
 private File makeChildDirectory(File storeDirectory) {
  SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
  String date = simpleDateFormat.format(new Date());
  //创建目录
  File childDirectory=new File(storeDirectory, date);
  if (!childDirectory.exists()) {
   childDirectory.mkdirs();
  }
  return childDirectory;
 }
 //多级目录
 private File makeChildDirectory(File storeDirectory, String filename) {
  filename=filename.replaceAll("-", "");
  File childDirectory =new File(storeDirectory, filename.charAt(0)+File.separator+filename.charAt(1));
  if (!childDirectory.exists()) {
   childDirectory.mkdirs();
  }
  return childDirectory;
 }
 //文本域
 private void processFormField(FileItem fileItem) {
  //对于文本域的中文乱码,可以用new String()方式解决
   try {
    String fieldName = fileItem.getFieldName();//表单中字段名name,如description
    String fieldValue = fileItem.getString("UTF-8");//description中value
//    fieldValue=new String(fieldValue.getBytes("ISO-8859-1"),"UTF-8");
    System.out.println(fieldName +":"+fieldValue);
   } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }

 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 基于java文件上传-原始的Servlet方式

    前言:干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感觉最不爽的时候,没有归属感,房租还不便宜,RT,不能好高骛远,还是脚踏实地一点一点学技术吧,终将有一日,工资会涨的. java文件上传 传统的文件上传,不用jquery插件的话,就是用form表单提交,项目里用过uploadify,可以异步上传文件,原理我也没研究.现在说传统的form表单上传文件.

  • FasfDFS整合Java实现文件上传下载功能实例详解

    在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</arti

  • Java实现拖拽文件上传dropzone.js的简单使用示例代码

    Java实习生一枚,前端知识薄弱,最近因为工作需要,做了一个拖拽文件上传的功能,发现dropzone.js挺不错的,特地做个笔记. dropzonejs 的官网是:http://www.dropzonejs.com/, 中文手册是:http://wxb.github.io/dropzonejs.com.zh-CN/ 自己写的拖拽文件至一个按钮上传的功能,前端及java代码如下: jsp页面: 1. 首先必须引入dropzone的js和css文件 <link rel="stylesheet&

  • Java Servlet简单实例分享(文件上传下载demo)

    项目结构 src com servletdemo DownloadServlet.java ShowServlet.java UploadServlet.java WebContent jsp servlet download.html fileupload.jsp input.jsp WEB-INF lib commons-fileupload-1.3.1.jar commons-io-2.4.jar 1.简单实例 ShowServlet.java package com.servletdem

  • java文件上传Demo(必看篇)

    说到文件上传我们要做到: 1.引入两个包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 2.将form改为上传文件模式:enctype="multipart/form-data" 3.开始编写相关代码 这里会用到几个关键的类:磁盘文件工厂DiskFileItemFactory : 创建servlet文件上传类:ServletFileUpload 还有几个重要的方法:DiskFileItemFactory类用于将以临时文件形式保存在磁

  • Java Web使用Html5 FormData实现多文件上传功能

    前一阵子,迭代一个线上的项目,其中有一个图片上传的功能,之前用的ajaxfileupload.js来实现上传的,不过由于ajaxfileupload.js,默认是单文件上传(虽然可以通过修改源码的方法来实现多文件上传),又加上是在移动端做的,所以就打算采用html5的FormData实现多文件上传 首先html页面定义有两种: Html1 <form enctype="multipart/form-data" id="formfile"> <inp

  • java实现ftp文件上传下载功能

    本文实例为大家分享了ftp实现文件上传下载的具体代码,供大家参考,具体内容如下 package getUrlPic; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org

  • JAVA SFTP文件上传、下载及批量下载实例

    1.jsch官方API查看地址(附件为需要的jar) http://www.jcraft.com/jsch/ 2.jsch简介 JSch(Java Secure Channel)是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序. SFTP(Secure File Transfer Protocol)安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH的一部份,是一种传输

  • Java 文件上传的实例详解

    Java 文件上传的实例详解 java 文件上传 Java文件上传,介绍几种常用的方法,也是经过本人亲手调试过的 1.jspsmartupload 这个组件用起来是挺方便的,不过就是只适合小文件上传,如果大文件上传的话就不行,查看了一下他的代码,m_totalBytes = m_request.getContentLength(); m_binArray = new byte[m_totalBytes];居然把整个上传文件都读到内存去了,那如果是上传几十M的文件,同时几个用户上传,服务器稳挂,不

  • javaweb实现文件上传示例代码

    本文实例为大家分享了javaweb文件下载的具体实现代码,供大家参考,具体内容如下 文件上传示例 注意:jsp页面编码为"UTF-8" 文件上传的必要条件 1.form表单,必须为POST方式提交 2.enctype="multipart/form-data" 3.必须有<input type="file" /> 前端jsp页面 <%@ page language="java" import="ja

  • Spring Boot实现文件上传示例代码

    使用SpringBoot进行文件上传的方法和SpringMVC差不多,本文单独新建一个最简单的DEMO来说明一下. 主要步骤包括: 1.创建一个springboot项目工程,本例名称(demo-uploadfile). 2.配置 pom.xml 依赖. 3.创建和编写文件上传的 Controller(包含单文件上传和多文件上传). 4.创建和编写文件上传的 HTML 测试页面. 5.文件上传相关限制的配置(可选). 6.运行测试. 项目工程截图如下: 文件代码: <dependencies>

  • Spring实现文件上传(示例代码)

    在实际开发中,经常遇到要实现文件上传到服务器端的功能.Spring可以继承commons-fileupload插件来实现文件上传的功能.分为前端JSP编写和后台Controller的编写. 前期准备工作,首先要引入commons-fileupload这个jar包,pom.xml中的配置如下: 复制代码 代码如下: <!-- 实现文件上传,spring集成了这个功能 --><dependency> <groupId>commons-fileupload</group

  • js 实现 input type="file" 文件上传示例代码

    在开发中,文件上传必不可少,<input type="file" /> 是常用的上传标签,但是它长得又丑.浏览的字样不能换,我们一般会用让,<input type="file" />隐藏,点其他的标签(图片等)来时实现选择文件上传功能. 看代码: 复制代码 代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <he

  • php设置允许大文件上传示例代码

    用Nginx做为代理服务器, 后端为 apache2. 设置允许上传最大为100M的文件. 1. Nginx配置: http { ...... client_max_body_size 100m; ...... } 2. PHP 配置文件 ...... ; Maximum execution time of each script, in seconds ; http://php.net/max-execution-time ; Note: This directive is hardcoded

  • SpringMvc MultipartFile实现图片文件上传示例

    整理文档,搜刮出一个SpringMvc MultipartFile实现图片文件上传示例,稍微整理精简一下做下分享. spring-servlet.xml <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver&qu

  • JavaWeb实现文件上传与下载实例详解

    在Web应用程序开发中,文件上传与下载功能是非常常用的功能,下面通过本文给大家介绍JavaWeb实现文件上传与下载实例详解. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,common-fileupload是依赖于c

  • Node层模拟实现multipart表单的文件上传示例

    有时候就是有这样的需求,Nodejs做webserver,从浏览器端上传文件到后端服务器,Node层只是做一个数据中转,如果在这个过程中,Node webserver需要对数据进行适当加工,然后再Post到后端,那么就得在Node层模拟文件上传了. 首先,通过浏览器上传文件,PostData格式是长着个样子的: 屏幕快照 2014-11-22 下午9.18.45.png 如图,每一组数据其实就是用"-----WebkitFormBoundary....."分隔开的,最后再用这个分隔符结

  • JavaWeb简单文件上传流程的实战记录

    目录 引言 前端上传文件 后端接受文件 总结 引言 这里实现一个简单的图片上传功能,主要是熟悉这个文件上传的交互流程.关于更复杂的文件上传,如大文件的切片上传.断点续传等,这里不做过多介绍. 前端上传文件 首先在前端创建一个页面,这里我们选择通过form表单的形式上传文件.在选择时,使用input标签中 的file类型就可以自动的选择本地文件. <!DOCTYPE html> <html lang="en"> <head> <meta char

  • javaweb实现文件上传功能

    本文实例为大家分享了javaweb实现文件上传的具体代码,供大家参考,具体内容如下 1.创建一个空项目 2.新建一个web application 的Module 3.创建一个lib目录导入需要用的jar包 commons-io commons-fileupload 4.将lib包添加到项目依赖(右键 Add as Library) 5.编写文件上传表单 <%--通过表单上传文件     get : 上传文件大小有限制     post : 上传文件大小没有限制     上传文件必须要encty

随机推荐