.JavaWeb文件上传

1.自定义上传

文件上传时的表单设计要符合文件提交的方式:

1.提交方式:post

2.表单中有文件上传的表单项:<input type="file"/>

3.指定表单类型:文件上传类型: enctype=“multipart/form-data”`

jsp上传页面:

<%--
Created by IntelliJ IDEA.
User: cenyu
Date: 16-12-20
Time: 下午8:52
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="username">
文件:<input type="file" name="file1"><br/>
<input type="submit" value="提交上传">
</form>
</body>
</html>

Servlet处理程序:

package test;

import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; /**
* 手动处理文件上传
* Created by cenyu on 16-12-20.
*/
@WebServlet("/upload")
public class uploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
request.getQueryString();//获取GET:username=Tom&pwd=888
request.getInputStream();//获取POST:inputStream
request.getParameter("");//使用这个可以不区分get和post
*/
//获取表单(POST)数据
ServletInputStream in = request.getInputStream();//此方法得到所有的提交信息,不仅仅只有内容
//转换流
InputStreamReader inReaser = new InputStreamReader(in);
//缓冲流
BufferedReader reader = new BufferedReader(inReaser);
String str = null;
while ((str=reader.readLine()) != null){
System.out.println(str);
} }
}

提交测试文件:

aaaaaaaaa
bbbbbbbbb
ccccccccc
dddddddd

运行结果:

-----------------------------468783950766433362585077246
Content-Disposition: form-data; name="username" cenyu
-----------------------------468783950766433362585077246
Content-Disposition: form-data; name="file1"; filename="test.txt"
Content-Type: text/plain aaaaaaaaa
bbbbbbbbb
ccccccccc
dddddddd
-----------------------------468783950766433362585077246--

2.FileUpload组件

FileUpload组件,也叫文件上传组件,是Apache提供的开源项目

组件使用方法:

1.下载,引入jar文件

引入commons-fileupload-1.2.1.jar

引入依赖包commons-io-1.4.jar

3.Api学习

文件上传组件API

FileItemFactory 文件上传工厂类(把每一个请求表单项封装为一个个FileItem对象)

fac.setRepository(repository);设置上传临时目录

ServletFileUpload 文件上传核心类,可以获取所有的FileItem对象

list pload.parseRequest(request);

Boolean isMultipartContent(request);判断表单类型,文件上传表单但会true

upload.setFileSizeMax(fileSizeMax);设置单个上传文件的最大值

upload.setSizeMax(sizeMax);设置总上传文件大总的最大值

upload.setHeaderEcoding("UTF-8");设置上传文件名的编码

FileItem 封装了普通表单项的值以及文件上传表单元素的值

item.getFiledName();获取上传表单元素的名称

item.getString();获取上传数据;

item.getString("UTF-8");获取上传数据,处理中文

item.getContentType();获取上传文件类型[文件上传项]

item.getInputStream();获取文件流[文件上传项]

item.getName();获取文件名[文件上传项]

item.write(file);把数据写到file文件

item.delete();删除临时文件

使用FileUpload组件来写上传方法的整体代码:

需求:

1.设置单个文件不能超过30M

2.设置总大小不能超过50M

3.上传目录,上传到项目资源目录下的upload目录

4.上传文件不能覆盖,解决上传文件名的同名问题

前端jsp页面中的代码没有改变,只需要看FileUploadServlet中的代码:

package Upload;

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 javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.attribute.FileTime;
import java.util.List;
import java.util.UUID; /**
* 文件上传组件完整使用
* Created by cenyu on 16-12-20.
*/
@WebServlet("/load")
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request,response);
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建文件上传工厂类
DiskFileItemFactory fac = new DiskFileItemFactory();
//2.创建文件上传核心类对象
ServletFileUpload upload = new ServletFileUpload(fac);
//【一、设置单个文件最大30M】
upload.setFileSizeMax(30*1024*1024);//30M
//【二、设置总文件大小:50M】
upload.setSizeMax(50*1024*1024); //50M //判断,当前表单是否为文件上传表单
if (upload.isMultipartContent(request)){ try {
//3.把请求数据转换为FileItem对象的集合
List<FileItem> list = upload.parseRequest(request);
//遍历,得到每一个上传项
for (FileItem item : list){
//判断:是普通表单项,还是文件上传表单项
if (item.isFormField()){
//普通表单x
String fieldName = item.getFieldName();//获取元素名称
String value = item.getString("UTF-8"); //获取元素值
System.out.println(fieldName+" : "+value); }else {
//文件上传表单 String name = item.getName(); //上传的文件名称
/**
* 【四、文件重名】
* 对于不同的用户的test.txt文件,不希望覆盖,
* 后台处理:给用户添加一个唯一标记!
*/
//a.随机生成一个唯一标记
String id = UUID.randomUUID().toString();
//与文件名拼接
name = id + name; //【三、上传到指定目录:获取上传目录路径】
String realPath = getServletContext().getRealPath("/upload");
//创建文件对象
File file = new File(realPath, name);
item.write(file);
item.delete();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}else {
System.out.println("不处理!");
} }
}

.JavaWeb文件上传和FileUpload组件使用的更多相关文章

  1. 文件上传使用FileUpload组件进行代码实现

    使用FileUpload组件进行代码实现 实现步骤 1. 获取解析器工厂: DiskFileItemFactory 2. 获取解析器对象: ServletFileUpload 3. 解析request ...

  2. JavaWeb——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  3. JavaWeb 文件 上传 下载

    文件上传下载对于一个网站来说,重要性不言而喻.今天来分享一个JavaWeb方式实现的文件上传下载的小例子. 项目依赖 项目目录 工作流程 文件上传 表单处的设置 服务器端 上传功能的实现 upload ...

  4. 【Java】JavaWeb文件上传和下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

  5. JavaWeb文件上传和下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

  6. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. java文件上传-使用apache-fileupload组件

    目前文件上传的(框架)组件:Apache----fileupload .Orialiy – COS – 2008() .Jsp-smart-upload – 200M. 用fileupload上传文件 ...

  8. JavaWeb 文件上传下载

    1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图片或网盘等功能都是利用文件上传下 ...

  9. 转载:JavaWeb 文件上传下载

    转自:https://www.cnblogs.com/aaron911/p/7797877.html 1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端 ...

随机推荐

  1. 浅谈 jQuery 核心架构设计

    jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...

  2. ABP文档 - Javascript Api - AJAX

    本节内容: AJAX操作相关问题 ABP的方式 AJAX 返回信息 处理错误 HTTP 状态码 WrapResult和DontWrapResult特性 Asp.net Mvc 控制器 Asp.net ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(63)-Excel导入和导出-自定义表模导入

    系列目录 前言 上一节使用了LinqToExcel和CloseXML对Excel表进行导入和导出的简单操作,大家可以跳转到上一节查看: ASP.NET MVC5+EF6+EasyUI 后台管理系统(6 ...

  4. jQuery学习之路(5)- 简单的表单应用

    ▓▓▓▓▓▓ 大致介绍 接下来的这几个博客是对前面所学知识的一个简单的应用,来加深理解 ▓▓▓▓▓▓ 单行文本框 只介绍一个简单的样式:获取和失去焦点改变样式 基本结构: <form actio ...

  5. InstallShield 脚本语言学习笔记

    InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      ...

  6. CGI与FastCGI nginx+PHP-FPM

    本文转载自CGI与FastCGI 1.当我们在谈到cgi的时候,我们在讨论什么 最早的Web服务器简单地响应浏览器发来的HTTP请求,并将存储在服务器上的HTML文件返回给浏览器,也就是静态html. ...

  7. 如何区别char与varchar?

    1.varchar与char两个数据类型用于存储字符串长度小于255的字符,MySQL5.0之前是varchar支持最大255.比如向一个长度为40个字符的字段中输入一个为10个字符的数据.使用var ...

  8. Hadoop的安装与设置(1)

    在Ubuntu下安装与设置Hadoop的主要过程. 1. 创建Hadoop用户 创建一个用户,用户名为hadoop,在home下创建该用户的主目录,就不详细介绍了. 2. 安装Java环境 下载Lin ...

  9. SpringMvc中的数据校验

    SpringMvc中的数据校验 Hibernate校验框架中提供了很多注解的校验,如下: 注解 运行时检查 @AssertFalse 被注解的元素必须为false @AssertTrue 被注解的元素 ...

  10. mono ios莫名其妙闪退的解决方法

    使用mono进行ios开发也有一年了,一直有个头疼的问题是闪退,而且闪退的时候并没有抛出明确的错误. 前两天在调试一个bug的时候,在序列化的时候又莫名其妙的闪退,后来在一位大神(博客地址)的指导下, ...