java file 进度条 文件上传

简介: java  file 进度条     public class MyProgressListener implements ProgressListener { private HttpSession session; public MyProgressLis...

java  file 进度条

 

 

public class MyProgressListener implements ProgressListener
	{
		private HttpSession session;

		public MyProgressListener(HttpServletRequest req)
		{
			session = req.getSession();
			FileUploadStatus status = new FileUploadStatus();
			session.setAttribute("status", status);
		}

		/*
		 * pBytesRead 到目前为止读取文件的比特数 pContentLength 文件总大小 pItems 目前正在读取第几个文件
		 */
		public void update(long pBytesRead, long pContentLength, int pItems)
		{
			FileUploadStatus status = (FileUploadStatus) session.getAttribute("status");
			status.setPBytesRead(pBytesRead);
			status.setPContentLength(pContentLength);
			status.setPItems(pItems);
		}
	}

 

 

 

public void uploadFile(HttpServletRequest req, HttpServletResponse rsp)
	{
		DiskFileItemFactory factory = new DiskFileItemFactory();
		factory.setSizeThreshold(2048 * 1024);
		MyProgressListener getBarListener = new MyProgressListener(req);
		ServletFileUpload upload = new ServletFileUpload(factory);
		upload.setFileSizeMax(2 * 1024 * 1024);
                upload.setHeaderEncoding("UTF-8"); 
		upload.setProgressListener(getBarListener);
		try
		{
			List<FileItem> formList = upload.parseRequest(req);
			Iterator<FileItem> formItem = formList.iterator();
			// 将进度监听器加载进去
			while (formItem.hasNext())
			{
				FileItem item = (FileItem) formItem.next();
				String originalNamePath = item.getName();
				if (originalNamePath == null || originalNamePath.equals("")){continue;}
				int index = originalNamePath.lastIndexOf("\\");
				String originalName = "";
				if (index != -1){
					originalName = originalNamePath.substring(index + 1);
				}else{
					originalName = originalNamePath;
				}
				this.getSession().setAttribute(ORIGINAL_NAME, originalName);
				if (item.isFormField()){
					logger.info("Field Name:" + item.getFieldName());
				}
				else{
					String filePostfix = item.getName().substring(item.getName().lastIndexOf(".") + 1).toLowerCase();
					if (!(ArraysUtil.isIncludeStrings(new String[] { "bmp", "png", "jpeg", "jpg", "gif" }, filePostfix)))
					{
						// 文件格式不对
						try
						{
							String rt = "{\"statuscode\":401}";
							rsp.getWriter().write(rt);
							break;
						}
						catch (Exception e)
						{
						}
					}
					String icoName = Long.toString(DatetimeUtil.getUniqueTimestamp());
					String filenamew = "mulit" + icoName + "." + filePostfix;
					File file = new File(FileUtil.getTomcatRootPath(req) + File.separatorChar + filenamew);
					logger.info(FileUtil.getTomcatRootPath(req) + File.separatorChar + filenamew);
					item.write(file);
					this.getSession().setAttribute("oafile", filenamew);
					logger.info("save oafile " + filenamew);
					try
					{
						String rt1 = "{\"statuscode\":200,\"filename\":\"" + filenamew + "\"}";
						rsp.getWriter().write(rt1);
						break;
					}
					catch (Exception e)
					{
					}
				}
			}
		}
		catch (FileSizeLimitExceededException e1)
		{
			logger.warn("", e1);
			e1.printStackTrace();
			try
			{
				String rt = "{\"statuscode\":400}";
				rsp.getWriter().write(rt);
			}
			catch (IOException e)
			{
				logger.warn("", e);
			}
		}
		catch (FileUploadException e2)
		{
			logger.warn("", e2);
			e2.printStackTrace();
		}
		catch (Exception e)
		{
			logger.warn("", e);
			e.printStackTrace();
		}
	}

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

目录
相关文章
|
10月前
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
624 6
|
10月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
372 1
java引入本地 MultipartFile 实现多部分文件上传
在Java中,`MultipartFile`通常用于处理通过HTML表单上传的文件。但在某些情况下,需要直接从本地文件系统获取文件并上传。本文介绍如何创建一个实现了`MultipartFile`接口的本地类`LocalMultipartFile`,将本地文件转换为`MultipartFile`对象,简化文件上传流程。此方法适用于批量上传等场景,避免了表单上传的复杂性。代码示例展示了如何实现和使用该类进行文件上传操作。作者:华科云商小彭。链接:[稀土掘金](https://juejin.cn/post/7377559533785530431)。
838 18
|
Java 编译器 Maven
Java“class file contains wrong class”解决
当Java程序运行时出现“class file contains wrong class”错误,通常是因为类文件与预期的类名不匹配。解决方法包括:1. 确保类名和文件名一致;2. 清理并重新编译项目;3. 检查包声明是否正确。
567 3
|
Java 编译器
成功解决:java file outside of source root
解决Java文件不在源代码根目录内的问题,可以通过在IDEA中将包含.java文件的目录设置为Sources Root来修复。
成功解决:java file outside of source root
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
1042 12
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
6387 2
|
Oracle Java 关系型数据库
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
如果遇到"exec format error"问题,文章建议先检查Linux操作系统是32位还是64位,并确保安装了与系统匹配的JDK版本。如果系统是64位的,但出现了错误,可能是因为下载了错误的JDK版本。文章提供了一个链接,指向Oracle官网上的JDK 17 Linux版本下载页面,并附有截图说明。
Linux下JDK环境的配置及 bash: /usr/local/java/bin/java: cannot execute binary file: exec format error问题的解决
java 文件上传 :MultipartFile 类型转换为file类型
java 文件上传 :MultipartFile 类型转换为file类型
686 9
|
存储 缓存 Java
15 Java IO流(File类+IO流+字节流+字符流+字节编码)
15 Java IO流(File类+IO流+字节流+字符流+字节编码)
306 3