JAVA使用commos

网友投稿 256 2023-07-22


JAVA使用commos

首先给大家介绍一文件的上传

实体类

import java.sql.Timestamp;

/**

*

* @Decription 文件上传实体类

*

*/

public class Upfile {

private String id;// ID主键 使用uuid随机生成

private String uuidname; // UUID名称

private String filename;//文件名称

private String savepath; // 保存路径

private Timestamp uploadtime; // 上传时间

private String description;// 文件描述

private String username; // 用户名

public Upfile() {

super();

}

public Upfile(String id, String uuidname, String filename, String savepath,

Timestamp uploadtime, String description, String username) {

super();

this.id = id;

this.uuidname = uuidname;

this.filename = filename;

this.savepath = savepath;

this.uploadtime = uploadtime;

this.description = description;

this.username = username;

}

public String getDescription() {

return description;

}

public String getFilename() {

return filename;

}

public String getId() {

return id;

}

public String getSavepath() {

return savepath;

}

public Timestamp getUploadtime() {

return uploadtime;

}

public String getUsername() {

return username;

}

public String getUuidname() {

return uuidname;

}

public void setDescription(String description) {

this.description = description;

}

public void setFilename(String filename) {

this.filename = filename;

}

public void setId(String id) {

this.id = id;

}

public void setSavepath(String savepath) {

this.savepath = savepath;

}

public void setUploadtime(Timestamp uploadtime) {

this.uploadtime = uploadtime;

}

public void setUsername(String username) {

this.username = username;

}

public void setUuidname(String uuidname) {

this.uuidname = uuidname;

}

}

页面

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

<%

String path = request.getContextPath();

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

%>

返回主页

Servlet

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;

import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.itheima.domain.Upfile;

import com.itheima.exception.MyException;

import com.itheima.service.UpfileService;

import com.itheima.service.impl.UpfileServiceImpl;

import com.itheima.untils.WebUntil;

public class UploadFileServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//判断表单是不是多个部分组成的

if(!ServletFileUpload.isMultipartContent(request)){

request.setAttribute("msg", "表单个设置错误,请检查enctype属性是是否设置正确");

request.getRequestDispatcher("/upload.jsp").forward(request, response);

return ;

}

//是多部分组成的就获取并遍历返回一个文件上传对象,包含上传的所有信息

try {

Upfile upfile=WebUntil.upload(request);

UpfileService upfileService=new UpfileServiceImpl();

boolean flag=upfileService.add(upfile);

if(flag){

request.setAttribute("msg", "上传成功");

request.getRequestDispatcher("/upload.jsp").fhttp://orward(request, response);

return ;

}else{

request.setAttribute("msg", "上传失败,请重试");

request.getRequestDispatcher("/upload.jsp").forward(request, response);

return ;

}

}catch (FileSizeLimitExceededException e) {

e.printStackTrace();

request.setAttribute("msg", "单个文件大小 ,超过最大限制");

request.getRequestDispatcher("/upload.jsp").forward(request, response);

return ;

} catch (SizeLimitExceededException e) {

e.printStackTrace();

request.setAttribute("msg", "总文件大小 ,超过最大限制");

request.getRequestDispatcher("/upload.jsp").forward(request, response);

return ;

}

}

}

工具类

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.UnsupportedEncodingException;

import java.util.ArrayList;

import java.util.List;

import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.fileupload.FileItem;

import org.apache.commons.fileupload.FileUploadBase;

import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;

import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;

import org.apache.commons.fileupload.FileUploadException;

import org.apache.commons.fileupload.ProgressListener;

import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.itheima.domain.Upfile;

import com.itheima.exception.MyException;

/**

* 文件上传工具类

* @Decription TODO

*

*/

public class WebUntil {

/**

* 文件上传的方法

* @param request 请求参数传入

* @return 返回一个Upfile对象

* @throws FileSizeLimitExceededException

* @throws SizeLimitExceededException

* @throws IOException

*/

public static Upfile upload(HttpServletRequest request) throws FileSizeLimitExceededException, SizeLimitExceededException {

Upfile upfile=new Upfile();

ArrayList fileList=initList();

try {

//获取磁盘文件对象工厂

DiskFileItemFactory factory=new DiskFileItemFactory();

String tmp=request.getSession().getServletContext().getRealPath("/tmp");

System.out.println(tmp);

//初始化工厂

setFactory(factory,tmp);

//获取文件上传解析器

ServletFileUpload upload=new ServletFileUpload(factory);

//初始化解析器

setUpload(upload);

//获取文件列表集合

List list = upload.parseRequest(request);

//遍历

for (FileItem items : list) {

//判断 是不是普通表单个对象

if(items.isFormField()){

//获取上传表单的name

String fieldName=items.getFieldName();

//value

String fieldValue=items.getString("UTF-8");

//判断

if("username".equals(fieldName)){

//设置

upfile.setUsername(fieldValue);

}else if("description".equals(fieldName)){

//设置属性

upfile.setDescription(fieldValue);

}

}else{

//是文件就准备上传

//获取文件名

String filename=items.getName();

//处理因为浏览器不同而导致的 获得 的 文件名的 差异

int index=filename.lastIndexOf("\\");

if(index!=-1){

filename=filename.substring(index+1);

}

//生成随机的文件名

String uuidname=generateFilename(filename);

//获取上传的文件路径

String savepath=request.getSession().getServletContext().getRealPath("/WEB-INF/upload");

//获取请求对象中的输入流

InputStream in = items.getInputStream();

//将文件打散存放在不同的路径,求出路径

savepath=generateRandomDir(savepath,uuidname);

//复制文件

uploadFile(in,savepath,uuidname);

String id=UUID.randomUUID().toString();

upfile.setId(id);

upfile.setSavepath(savepath);

upfile.setUuidname(uuidname);

upfile.setFilename(filename);

//清除缓存

items.delete();

}

}

}catch ( FileUploadBase.FileSizeLimitExceededException e) {

//抛出出异常

throw e;

} catch (FileUploadBase.SizeLimitExceededException e) {

//抛出出异常

throw e;

}catch (FileUploadException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

return upfile;

}

/**

* 初始化文件列表

* @return

*/

private static ArrayList initList() {

ArrayList list=new ArrayList();

list.add(".jpg");

list.add(".rar");

list.add(".txt");

list.add(".png");

return list;

}

/**

* 复制文件

* @param in items中的输入流

* @param savepath 保存路径

* @param uuidname 文件名

*/

private static void uploadFile(InputStream in, String savepath,

String uuidname) {

//获取文件

File file=new File(savepath, uuidname);

OutputStream out = null;

try {

int len=0;

byte [] buf=new byte[1024];

//获取输出流

out = new FileOutputStream(file);

while((len=in.read(buf))!=-1){

out.write(buf, 0, len);

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}finally{

try {

in.close();

} catch (IOException e) {

e.printStackTrace();

}

try {

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 生成随机的存放路径

* @param savepath 保存路径

* @param uuidname 生成的uuid名称

* @return

* 使用hashcode完成

*/

private static String generateRandomDir(String savepath, String uuidname) {

//转化为hashcode

System.out.println("上传路径"+savepath);

System.out.println("UUIDNAME"+uuidname);

int hashcode=uuidname.hashCode();

//容器

StringBuilder sb=new StringBuilder();

while(hashcode>0){

//与上15

int tmp=hashcode&0xf;

sb.append("/");

sb.append(tmp+"");

hashcode=hashcode>>4;

}

//拼接新的路径

String path=savepath+sb.toString();

System.out.println("path"+path);

File file=new File(path);

//判断路径存不存在

if(!file.exists()){

//不存在就创建

file.mkdirs();

}

//返回保存路径

return path;

}

/**

* 生成新的文件名

* @param uuidname 随机的ID名字

* @param filename 原来的名

* @return

*/

private static String generateFilename( String filename) {

String uuidname=UUID.randomUUID().toString();

return uuidname.replace("-", "").toString()+"_"+filename;

}

/**

* 初始化解析器

* @param upload

*/

private static void setUpload(ServletFileUpload upload) {

// 设置 字符编码

upload.setHeaderEncoding("utf-8");

//设置文件大小

upload.setFileSizeMax(1024*1024*20);

//设置总文件大小

upload.setSizeMax(1024*1024*50);

//设置进度监听器

upload.setProgressListener(new ProgressListener() {

public void update(long pBytesRead, long pContentLength, int pItems) {

System.out.println("已经读取: "+pBytesRead+",总共有: "+pContentLength+", 第"+pItems+"个");

}

});

}

/**

* 工厂初始化方法

* @param factory

* @param tmp 缓冲目录

*/

private static void setFactory(DiskFileItemFactory factory, String tmp) {

/// 配置初始化值缓冲区

factory.setSizeThreshold(1024*1024);

File file=new File(tmp);

//设置缓冲目录

factory.setRepository(file);

}

}

二文件下载

Servlet

public class DownupfileServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

doPost(request, response);

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//获取ID

String id=request.getParameter("id");

//业务层的接口

UpfileService upfileService=new UpfileServiceImpl();

//根据ID查找这个对象

Upfile upfile=upfileService.findUpfileById(id);

if(upfile==null){

return;

}

//获取文件的真实名称

String filename=upfile.getFilename();

//如果文件名中有中文,需要转码,不然就下载时没有文件名

filename=URLEncoder.encode(filename, "utf-8");

//更改过的名称

String uuidname=upfile.getUuidname();

//保存路径

String savepath=upfile.getSavepath();

File file=new File(savepath,uuidname);

//判断文件 是否存在

if(!file.exists()){

request.setAttribute("msg", "下载 的文件过期了");

request.getRequestDispatcher("/index").forward(request, response);

return;

}

//设置文件下载响应头信息

response.setHeader("Content-disposition", "attachement;filename="+filename);

//使用IO流输出

InputStream in = new FileInputStream(file);

ServletOutputStream out = response.getOutputStream();

int len=0;

byte [] buf=new byte[1024];

while((len=in.read(buf))!=-1){

out.write(buf, 0, len);

}

in.close();

}

}

数据库

create database upload_download_exercise;

use upload_download_exercise;

create table upfiles(

id varchar(100), //使用UUID生成

uuidname varchar(255),//uuid加上原来的文件名

filename varchar(100),//真实文件名

savepath varchar(255),//保存路径

uploadtime timestamp,//上传时间

description varchar(255),//描述

username varchar(10) 上传人

);

以上所述是给大家分享的JAVA使用commos-fileupload实现文件上传与下载的相关内容,希望对大家有所帮助。


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

上一篇:详解Webwork中Action 调用的方法
下一篇:归并排序的原理及java代码实现
相关文章

 发表评论

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