《文件上传》

《文件上传》

开发工具与关键技术:MyEclipse 10、Java
作者:潘玉莹
撰写时间:2019-07-22

很多时候我们做项目的时候都会新增一个图片、文档,视频等文件。以下是上传文件的代码解释
我们上传文件是通过form表单提交到servlet里的,相应的还要在form表单设计一个编码格式enctype=“multipart/form-data” 这是一定要设计的
如果还有其他数据和文件一起上传的话,则需要把相应的names值也一起提交过去,我这里通过name值传过去的

Servlet层
声明一个方法
if (“selectKeHu”.equals(type)) {selectKeHu(request,response);}
在方法里设计编码格式
response.setContentType(“application/json”);
声明一个对象,对象里有你所需要上传的数据
KeHuHeTong keHuHeTong=new KeHuHeTong();

声明一个String集合,这主要是来用装上传文件的
List listFile=new ArrayList();

获取当前文件项目文件的路径,上传的文件主要是存放在这个路径下的
把文件路径放在File对象里
String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
File file = new File(savePath);

如果没有或不存在则创建路径
if(!file.exists()&&!file.isDirectory()){file.mkdir();}

使用Apache文件上传组件处理文件上传步骤
//1、创建一个DiskFileItemFactory工厂
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory()
//2、创建一个文件上传解析器
ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
//解决上传文件名的中文乱码
fileUpload.setHeaderEncoding(“UTF-8”);
判断提交上来的数据是否是上传表单的数据,这里按照传统方式获取数据
if(!fileUpload.isMultipartContent(request)){
return;}

使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List集合,每一个FileItem对应一个Form表单的输入项
List list = fileUpload.parseRequest(request);
通过for循环遍历数据,这里通过反射获取JSP传过来的names值,代码如下
以下获取的name值的类型有int,String,boolean,double类型,在这里还要判断获取的不是文件才去通过反射获取
在这里插入图片描述
判断要获取的扩展名
if(!(“xls”.equals(fileExtName)||“png”.equals(fileExtName)||“xlsx”.equals(fileExtName)||“docx”.equals(fileExtName)||“jpg”.equals(fileExtName)||“jpeg”.equals(fileExtName))){
PrintWriter out=response.getWriter();
message=“上传文件中第”+z+“个文件类型不符合!”;
out.write(ToJsonUtil.toJson(message));
out.flush();
out.close();
return;
}

如果类型不正确返回提示

获取item中的上传文件的输入流
InputStream is = item.getInputStream();
创建一个文件输出流
FileOutputStream fos = new FileOutputStream(savePath+File.separator+fileName);
创建一个缓冲区
byte buffer[] = new byte[1024];
判断输入流中的数据是否已经读完的标识
int length = 0;
while((length = is.read(buffer))>0){
fos.write(buffer, 0, length);
}
关闭输入流
is.close();
关闭输出流
fos.close();
删除处理文件上传时生成的临时文件
item.delete();

通过Json把数据返回JSP页面中
JsonReturn jsonReturn = new JsonReturn();
jsonReturn.setState(false);
jsonReturn.setMsg(“上传失败”);
去执行Dao层的方法
int returnValue = staffService.insertContract(keHuHeTong,listFile);
成功就返回数据到页面
在这里插入图片描述
Dao层代码
因为我这里接收是多条数据文件所以要用集合接收,数据库表要设计两张表一对多
首先把文件外的数据新增完然后获取新增的主键再通过for新增到文件表。所以这里要写两个新增的SQL语句,代码如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值