servlet文件上传

package com.peng.web;

import java.io.BufferedInputStream;
import
java.io.BufferedOutputStream;
import java.io.File;
import
java.io.FileInputStream;
import java.io.FileOutputStream;
import
java.io.IOException;
import java.io.InputStream;
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.codec.digest.DigestUtils;
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;

public class uploadServlet extends HttpServlet {
private static final
long serialVersionUID = 1L;

@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest
request, HttpServletResponse response)
throws ServletException,
IOException {
//上传路径
File file =new
File("E:/upload");
//上传临时路径
File tFile = new
File("E:/tempupload");
//判断文件夹是否存在,如果不存在就创建
if (!file.exists())
{
file.mkdir();
}
//判断临时文件夹是否存在,如果不存在就创建
if (!tFile.exists())
{
tFile.mkdir();
}
//判断form中enctype="multipart/form-data"有没有写
if
(ServletFileUpload.isMultipartContent(request)) {
DiskFileItemFactory
factory = new
DiskFileItemFactory();
//设置缓冲区大小
factory.setSizeThreshold(10*1024);
//设置临时文件夹
factory.setRepository(tFile);

ServletFileUpload
upload = new
ServletFileUpload(factory);
//设置文件上传的大小
upload.setSizeMax(10*1024*1024);

try
{
//获取表单元素传过来的值
List<FileItem> fileItems =
upload.parseRequest(request);
for(FileItem item : fileItems){
if
(item.isFormField())
{
//普通的表单元素
item.getFieldName();//获取表单的name
item.getString();//获取表单的值
}else{
//文件元素,进行io操作
item.getName();//上传文件的文件名
item.getFieldName();//获取文件的name属性
item.getContentType();//获取文件的类型
item.getSize();//获取文件的大小

InputStream
inputStream =
item.getInputStream();
//根据MD5的值判断文件系统中是否存在被上传的文件
String path =
haveFile(inputStream);
if(path != null)
{
System.out.println("文件已经存在:" + path);
} else
{
BufferedInputStream bis = new
BufferedInputStream(item.getInputStream());

String newFileName =
getFileNewName(item.getName());
BufferedOutputStream bos = new
BufferedOutputStream(new FileOutputStream(new
File(file,newFileName)));

byte[] buffer = new
byte[1024];
int len = -1;
while((len = bis.read(buffer))
!= -1) {
bos.write(buffer, 0,
len);
}
bos.flush();
bos.close();
bis.close();
}

}
}

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

}
}
//防止名字重复
private
String getFileNewName(String name) {
String extName =
name.substring(name.lastIndexOf("."));
UUID uuid =
UUID.randomUUID();
String newName = uuid.toString() + extName;
return
newName;
}

//查看是否有相同的文件
public String haveFile(InputStream
inputStream) {

String path = null;
try {
String md5 =
DigestUtils.md5Hex(inputStream);

File file = new
File("E:/upload");
File[] files = file.listFiles();
for(File subFile
: files) {
InputStream ins = new FileInputStream(subFile);
String
subFileMd5 = DigestUtils.md5Hex(ins);
if(md5.equals(subFileMd5))
{
path = subFile.getPath();
}
}

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

return
path;

}

}

servlet文件上传,布布扣,bubuko.com

时间: 2024-10-07 22:00:58

servlet文件上传的相关文章

ServletFileUpload(Servlet文件上传)

1 //**文件上传** form表单提交必须指定Enctype 属性指定将数据回发到服务器时浏览器使用的编码类型"multipart/form-data" 2 //1.创建磁盘文件项目工厂 3 DiskFileItemFactory df=new DiskFileItemFactory(); 4 //2.设置上传的内存缓存区大小 4096=4KB 5 df.setSizeThreshold(4096); 6 //3.实列化Servlet文件上传对象 把'磁盘文件项目工厂'放入构造中(

web文件上传一学习记录 (简单的web浏览器可读文件的上传,servlet 文件上传)

文件上传:这里用得时表单上传的方式,表单上传到的时候 method一定指定为POST,enctype="multipart/form-data". 第一种方式,直接上传.读取.显示内容,并没有存储到服务器端. 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.g

servlet文件上传2——复合表单提交(数据获取和文件上传)

上传文件时表单enctype属性必须要更改为<enctype='multipart/form-data'>:采用post提交表单,元素需要有name属性: 利用第三方jar包(commons-fileupload-1.2.1.jar   commons-io-1.3.2.jar )进行普通数据获取和文件上传:普通文本需要用getString("编码格式")方法获取,否则汉字会出现乱码,最开始我一直用的getString()获取,发现传到数据的数据全是乱码,查看流浪器的里面的

Servlet 文件上传

Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器.上传的文件可以是文本文件或图像文件或任何文档. 本文使用到的文件有: 创建一个文件上传表单 下面的 HTML 代码创建了一个文件上传表单.以下几点需要注意: 表单 method 属性应该设置为 POST 方法,不能使用 GET 方法. 表单 enctype 属性应该设置为 multipart/form-data. 多部分表单    参考深入解析multipart/form-data. 表单 action 属性应

【Java】Servlet文件上传-无需导入其他Jar包

Servlet3.0中,改进了部分API,简化了Java Web的开发. 如,文件上传.传统的文件上传需要借助于common-fileupload等工具,很复杂,借助Servlet3.0的API则极为简单. 上传页面upload.jsp/upload.html <form method="post" action="upload" enctype="multipart/form-data"> 选择文件:<input type=&

servlet 文件上传简易版

package cn.itcast.servlet; import java.io.File;import java.io.IOException;import java.util.List; import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSe

servlet实现文件上传,预览,下载和删除

CreateTime--2017年9月4日09:24:59 Author:Marydon 一.准备工作: 1.1 文件上传插件:uploadify: 1.2 文件上传所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar 1.3 将数据转成JSON对象需要jar包:commons-beanutils-1.8.3.jar.commons-collections-3.2.1.jar.commons-lang-2.6.jar.commons-log

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类用于将以临时文件形式保存在磁

JavaWeb中的文件上传和下载功能的内容就这么多

一.开发环境搭建 创建一个FileUploadAndDownLoad项目,加入Apache的commons-fileupload文件上传组件的相关Jar包,如下图所示: 二.实现文件上传 2.1.文件上传页面和消息提示页面 upload.jsp页面的代码如下: 1<%@ page language="java" pageEncoding="UTF-8"%> 2<!DOCTYPE HTML> 3<html> 4<head>