关于使用jsp实现文本和file文件同时长传的问题

1 篇文章 0 订阅

近日工作上的一个业务困扰我很久,在网页端需要同时上传file文件和text文本,在曾经的学习中,仅仅实现过文本上传,在servlet端读取的功能。文件上传没有接触过,同时上传文件和文本更是懂之甚少。于是在万能百度上搜了一些资料,讲解的也很全面,只要有耐心的做下去,都会解决问题。我用的是其中的一种方法,将源码给大家看看。
1、这是用到的两个jar包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar网上jar包的下载很多,下载后将他们导入放在lib下即可。

这里写图片描述
2.这是前端代码:
<body>
<form action="MainServlet.do" enctype="multipart/form-data" method="post">
<table>
<input type="file" name="upFile"/>
<input type="text" name="imsi" value="1111"/>
<input type="text" name="Iccid" value="1111"/>
<input type="submit"/>
</table>
</form>
</body>

这里写图片描述
这是后端代码:
request.setCharacterEncoding("utf-8");
RequestContext requestContext = new ServletRequestContext(request);
if(FileUpload.isMultipartContent(requestContext)){
DiskFileItemFactory factory = new DiskFileItemFactory();
//设置文件的缓存路径
factory.setRepository(new File("c:/tmp/"));
ServletFileUpload upload = new ServletFileUpload(factory);
List items = new ArrayList();//创建集合用于添加文件名字列表
try {
//上传文件并解析出所有的普通字段和文件字段
items = upload.parseRequest(request);
} catch (FileUploadException e1) {
System.out.println("文件上传发生错误" + e1.getMessage());
}
//下面对每个字段进行处理,分普通字段和文件字段
Iterator it = items.iterator();
//这个map 用于存放后端文本内容,key做文件名,value作为文件值
Map<String,String> map=new HashMap<String,String>();
File newFile=null;
while(it.hasNext()){
FileItem fileItem = (FileItem) it.next();
if(fileItem.isFormField()){
String name = fileItem.getFieldName();
String value = fileItem.getString();
map.put(name, value);
// String value=map.get("key");
}else{
//把缓存里的数据写到目标路径下
if(fileItem.getName()!=null && fileItem.getSize()!=0){
File fullFile = new File(fileItem.getName());
newFile = new File("c:/temp/" + fullFile.getName());
//将缓存文件放在我们需要的文件夹下边
System.out.println("文件的存放位置"+newFile);
try {
fileItem.write(newFile);
} catch (Exception e) {
e.printStackTrace();
}
}else{
System.out.println("文件没有选择 或 文件内容为空");
}
}
}
//打印Map
System.out.println("打印map:"+map);
//也可以对 文件进行读取;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值