javaweb实现文件上传示例代码

网友投稿 237 2023-05-25


javaweb实现文件上传示例代码

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

文件上传示例

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

文件上传的必要条件

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

2.enctype="multipart/form-data"

3.必须有

前端jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

文件的描述:


实现文件上传的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(102http://4*1024*10);//大小为10M

try {

//fileload解析request请求,返回list集合

List 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 {

//获得文件输入流

AHgWQInputStream 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.printAHgWQln(fieldName +":"+fieldValue);

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:30分钟入门Java8之默认方法和静态接口方法学习
下一篇:java 中Comparable与Comparator详解与比较
相关文章

 发表评论

暂时没有评论,来抢沙发吧~