FileUpload系列:(2)文件上传示例

示例

package com.rk.web.servlet;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.UUID;

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.FileItemFactory;
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.FileUtils;

public class UploadServlet extends HttpServlet {

	// upload目录,保存上传的资源
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		/*********文件上传组件: 处理文件上传************/

		try {
			// 1. 文件上传工厂
			FileItemFactory factory = new DiskFileItemFactory();
			// 2. 创建文件上传核心工具类
			ServletFileUpload upload = new ServletFileUpload(factory);

			// 一、设置单个文件允许的最大的大小: 30M
			upload.setFileSizeMax(30*1024*1024);
			// 二、设置文件上传表单允许的总大小: 80M
			upload.setSizeMax(80*1024*1024);
			// 三、 设置上传表单文件名的编码
			// 相当于:request.setCharacterEncoding("UTF-8");
			upload.setHeaderEncoding("UTF-8");

			// 3. 判断: 当前表单是否为文件上传表单
			if (upload.isMultipartContent(request)){
				// 4. 把请求数据转换为一个个FileItem对象,再用集合封装
				List<FileItem> list = upload.parseRequest(request);
				// 遍历: 得到每一个上传的数据
				for (FileItem item: list){
					// 判断:普通文本数据
					if (item.isFormField()){
						// 普通文本数据
						String fieldName = item.getFieldName();	// 表单元素名称
						String content = item.getString();		// 表单元素名称, 对应的数据
						//item.getString("UTF-8");  指定编码
						System.out.println(fieldName + "=" + content);
					}
					// 上传文件(文件流) ----> 上传到upload目录下
					else {
						// 文件上传数据
						String fieldName = item.getFieldName();	// 表单元素名称
						String name = item.getName();			// 文件名
						String content = item.getString();		// 表单元素名称, 对应的数据
						String type = item.getContentType();	// 文件类型
						InputStream in = item.getInputStream(); // 上传文件流

						/*
						 *  四、文件名重名
						 *  对于不同用户的同名文件,不希望覆盖!
						 *  后台处理: 给用户添加一个唯一标记!
						 */
						// a. 随机生成一个唯一标记
						String id = UUID.randomUUID().toString();
						// b. 与文件名拼接
						name = id +"#"+ name;

						// 获取上传基路径
						String path = getServletContext().getRealPath("/upload");
						// 创建目标文件
						File file = new File(path,name);

						// 工具类,文件上传
						item.write(file);
						item.delete();   //删除系统产生的临时文件

						System.out.println();
					}

				}

			}
			else {
				System.out.println("当前表单不是文件上传表单,处理失败!");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	// 手动实现过程
	private void upload(HttpServletRequest request) throws IOException,
			UnsupportedEncodingException {
		/*
		request.getParameter(""); // GET/POST
		request.getQueryString(); // 获取GET提交的数据 
		request.getInputStream(); // 获取post提交的数据   */

		/***********手动获取文件上传表单数据************/

		//1. 获取表单数据流
		InputStream in =  request.getInputStream();
		//2. 转换流
		InputStreamReader inStream = new InputStreamReader(in, "UTF-8");
		//3. 缓冲流
		BufferedReader reader = new BufferedReader(inStream);
		// 输出数据
		String str = null;
		while ((str = reader.readLine()) != null) {
			System.out.println(str);
		}

		// 关闭
		reader.close();
		inStream.close();
		in.close();
	}

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

}
时间: 2024-10-29 19:07:09

FileUpload系列:(2)文件上传示例的相关文章

asp.net core系列 69 Amazon S3 资源文件上传示例

原文:asp.net core系列 69 Amazon S3 资源文件上传示例 一.  上传示例 Amazon Simple Storage Service 是互联网存储解决方案.该服务旨在降低开发人员进行网络规模级计算的难度. Amazon S3 提供了一个简单 Web 服务接口,可用于随时在 Web 上的任何位置存储和检索任何数量的数据.此服务让所有开发人员都能访问同一个具备高扩展性.可靠性.安全性和快速价廉的数据存储基础设施, Amazon 用它来运行其全球的网站网络.此服务旨在为开发人员

JS组件系列——Bootstrap文件上传组件:bootstrap fileinput

原文:JS组件系列--Bootstrap文件上传组件:bootstrap fileinput 前言:之前的三篇介绍了下bootstrap table的一些常见用法,发现博主对这种扁平化的风格有点着迷了.前两天做一个excel导入的功能,前端使用原始的input type='file'这种标签,效果不忍直视,于是博主下定决心要找一个好看的上传组件换掉它.既然bootstrap开源,那么社区肯定有很多关于它的组件,肯定也有这种常见的上传组件吧.经过一番查找,功夫不负有心人,还是被博主找到了这个组件:

使用Commons FileUpLoad组件实现文件上传功能

Commons 是Apache开放的源码组织的一个java子项目,该项目主要涉及一些开发中常用的模块,如文件上传,命令行处理,数据库连接池等.FileUpLoad就是其中的一个用于处理HTTP文件上传的子项目.Commons FileUpLoad组建具有以下几个特点: 1.使用简单:Commons FileUpLoad组件可以方便的嵌入JSP文件中,在JSP文件中仅编写少量代码就可完成文件上传功能,十分方便. 2.能够全程控制上传的内容:使用Commons FileUpLoad组件提供的对象及操

Spring Boot文件上传示例(Ajax和REST)

本文介绍如何使用Ajax请求在Spring Boot Web应用程序(REST结构)中上传文件. 本文中使用的工具: Spring Boot 1.4.3.RELEASE Spring 4.3.5.RELEASE Thymeleaf jQuery (webjars) Maven Embedded Tomcat 8.5.6 Google Chrome浏览器 1. 项目结构 一个标准的Maven项目结构.如下图所示 - 2. 项目依赖 声明一个额外的jQuery webjar依赖关系,适用于HTML格

dwz+jquery+fileupload+springmvc实现文件上传 及图片预览

1 前台jsp:文件的上传利用了iframe实现局部刷新功能.使用了apache的fileupload组件,用到的jar: commons-fileupload.jar,commons-io.jarDiskFileItemFactory fac = new DiskFileItemFactory();ServletFileUpload upload = new ServletFileUpload(fac);upload.setHeaderEncoding("utf-8"); Html代

PHP+ExtJS 文件上传示例

xtJS 4 有一个非常方便的文件上传组件,可以用来将文件上传到服务器.本文PHP教程UncleToo将介绍使用PHP和ExtJS实现文件上传功能. 首先,创建文件上传组件Ext.form.Panel,并添加一个上传按钮及按钮单击事件,该事件将验证并提交表单到upload.php的文件.看下面代码: ExtJS部分 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 3

springmvc_文件上传示例

开始接触springmvc,有点期待,有点兴奋.单今天的一点小事差点让我崩溃了.在这记录下,不是记录什么技术点,纯粹是警告下自己,再小心不为过啊! 做了个小例子: 搭好springmvc的架子,导好相关的包(当让做文件上传commons-fileupload.jar这个肯定是必须要的). ①配置好web.xml 文件: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="h

js 实现 input type=&quot;file&quot; 文件上传示例代码

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

文件上传示例代码

#region 文件上传.        /// <summary>        /// 文件上传.        /// </summary>        public async Task<string> UpLoadFilesAsync(string fileName, string token)        {            string fileType = Path.GetExtension(fileName);            stri