关于表单上传文件,不刷新获取不到文件问题

在进行表单文件上传操作时,有时会遇到一个常见问题:如果不刷新页面,无法获取到新上传的文件。这通常由于流未正确刷新或关闭导致,影响了后续文件读取。了解这一现象并掌握解决方法对于优化文件上传体验至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般都是流没有刷新关闭的问题

// 判断上传表单是否为multipart/form-data类型
		//创建请求上下文
		RequestContext reqCtx=new ServletRequestContext(req);
		if(ServletFileUpload.isMultipartContent(reqCtx)) {
			try {
				//1.创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录
				DiskFileItemFactory factory=new DiskFileItemFactory();
				//2.创建ServletFileUpload对象,并设置上传文件的大小限制
				ServletFileUpload sfu=new ServletFileUpload(factory);
				sfu.setSizeMax(10*1024*1024);//以byte为单位,不超过10m
				sfu.setHeaderEncoding("utf-8");
				
				//3.调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的list对象
				List<FileItem> fileItemList=sfu.parseRequest(reqCtx);
				Iterator<FileItem> fileItems=fileItemList.iterator();
				//4.遍历list,每迭代一个FileItem对象,调用其isFormField方法判断是否是上传文件
				
				while(fileItems.hasNext()) {
					FileItem fileItem=fileItems.next();
					if(fileItem.isFormField()) {
						//普通表单元素
						String name=fileItem.getFieldName();
						String value=fileItem.getString("utf-8");//name对应的value值
						System.out.println(name+"="+value);
						if(name.equals("traveller")){
							userId=value;
							System.out.println(userId);
						}else{
							content=value;
							System.out.println(content);
						}
					}else {
						//<input type="file">上传文件的元素
						String fileName=fileItem.getName();//文件名称
						System.out.println("原文件名:"+fileName);//xxx.jpg
						picName.add(fileName);
						String suffix=fileName.substring(fileName.lastIndexOf('.'));
						System.out.println("扩展名:"+suffix);//.jpg
						
						//新文件名(唯一)
						int num=(int)(Math.random()*900)+100;//100-999随机数
						String newFileName=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+num+suffix;
						System.out.println("新文件名:"+newFileName);//image/1478509873038.jpg
						picPath.add(""+userId+"/"+newFileName);
						System.out.println(picPath);
						//5.调用FileItem的write()方法,写入文件
						//
						File file=new File("E:\\workspace\\Journey\\WebContent\\traveller\\message\\images\\"+userId+"\\"+newFileName);
						System.out.println(file.getAbsolutePath());
						//之前用FIleItem写入,但它没有刷新关闭的方法,还是采用流的方式好点
						**InputStream in=fileItem.getInputStream();
						@SuppressWarnings("resource")
						FileOutputStream fos=new FileOutputStream(file);
						int len=0;
						byte[] buff=new byte[1024];
						while((len=in.read(buff))!=-1){
							fos.write(buff,0,len);
						}
						fos.flush();**
						if(file.exists()){
							System.out.println("文件已存在");
						}else{
							System.out.println("文件不存在");
						}
						//调用FileItem的delete方法,删除临时文件
//						fileItem.delete();
						//存储到数据库时注意1、保存源文件名称2、保存相对路径
//						fileItem.
					}
				}
			} catch (FileUploadException e) {
				e.printStackTrace();
			}catch (Exception e) {
				e.printStackTrace();
			}
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值