`
hekuilove
  • 浏览: 156392 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

笔记:将FileItem存放于缓存

 
阅读更多
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;

import org.apache.commons.fileupload.FileItem;

/**
 * 
 * @ClassName: FileItemHelper
 * @description: 存放临时文件,此类仅支持文件较小,并且存放时间极短的文件,除此类型的文件请存放于硬盘。
 * @author: QUINN
 * @date: 2014年6月4日 上午10:47:53
 * @version: V1.0
 * 
 */
public class FileItemHelper {

	private FileItemHelper() {

	}

	// 临时文件存放时间 超时4分钟
	private final int TIMEOUT = 1000 * 60 * 4;

	private boolean isCheck = false;

	private static FileItemHelper INSTANCE;

	public static FileItemHelper getInstance() {
		if (FileItemHelper.INSTANCE == null) {
			synchronized (sync) {
				if (FileItemHelper.INSTANCE == null)
					FileItemHelper.INSTANCE = new FileItemHelper();
			}
		}
		return FileItemHelper.INSTANCE;
	}

	// 线程锁对象
	private static Object sync = 1;

	public String putItem(FileItem item) {
		synchronized (sync) {
			String uuid = UUID.randomUUID().toString().replace("-", "");
			datas.put(uuid, item);
			timeouts.put(uuid, System.currentTimeMillis());
			isCheck = true;
			this.checkThread.start();
			return uuid;
		}
	}

	private Thread checkThread = new Thread() {
		public void run() {
			while (true) {
				if (isCheck)
					synchronized (sync) {
						if (timeouts.isEmpty()) {
							isCheck = false;
							break;
						}
						long now = System.currentTimeMillis();
						Iterator<String> ite = timeouts.keySet().iterator();
						while (ite.hasNext()) {
							String key = ite.next();
							long time = timeouts.get(key);
							if (now - time > TIMEOUT) {
								datas.remove(key);
								ite.remove();
							}
						}
					}

				try {
					Thread.sleep(5 * 1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		};
	};

	/**
	 * 
	 * 
	 * @Title: getFileItem
	 * @Description: 获取了FileItem后会自动删除
	 * @param: <p>
	 * @param key
	 * @param: <p>
	 * @return <p>
	 * @date: 2014年6月4日
	 * @return: FileItem
	 * @throws
	 * 
	 */
	public FileItem getFileItem(String key) {
		synchronized (sync) {
			FileItem item = this.datas.get(key);
			this.datas.remove(key);
			this.timeouts.remove(key);
			if (timeouts.isEmpty())
				this.isCheck = false;

			return item;
		}
	}

	// 存文件
	private Map<String, FileItem> datas = new HashMap<String, FileItem>();
	// 超时时间
	private Map<String, Long> timeouts = new HashMap<String, Long>();


}

分享到:
评论

相关推荐

    浅谈FileItem类的常用方法

    下面小编就为大家带来一篇浅谈FileItem类的常用方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Python库 | file_item-1.0.0-py3-none-any.whl

    python库,解压后可用。 资源全名:file_item-1.0.0-py3-none-any.whl

    文件上传代码

    // 得到文件上传工厂 FileItemFactory factory = new ... // 集合数据 : FileItem对象 注意: 每一个表单域 对应一个 FileItem对象(封装) List&lt;FileItem&gt; fileItemList = fileUpload.parseRequest(request);

    tomcat10升级单个jar里面的jakarta.servlet.http.HttpServletRequest

    目的:tomcat10版本导致List&lt;FileItem&gt; fileItems = sfu.parseRequest(request) 入参的HttpServletRequest必须为:import jakarta.servlet.http.HttpServletRequest; 运行cmd,再该目录下执行: 执行步骤:java -...

    file java 上传 下载

    当上传文件大于缓冲区大小时, fileupload组件将使用临时文ServletFileUpload 负责处理上传的文件数据,并将表单中每个输入项封装成一个 FileItem 对象中。常用方法有: boolean isMultipartContent...

    struts2真正实现上传下载完整源代码

    参考了phantomes的专栏,解决了其中的FileItem调用问题。 struts2真正实现上传下载完整源代码。 包含lib jar包

    java File

    NULL 博文链接:https://qinya.iteye.com/blog/643084

    jsp文件上传下载通用包

    FileUpload组件将页面提交的所有元素(普通form表单域,如text和文件域file)都看作一样的FileItem,这样上传页面提交的 request请求也就是一个FileItem的有序组合,FileUpload组件可以解析该request,并返回一个一个...

    base64文件与字符串互转

    base64将文件(图片或其它)转码成字符串,将字符串还原成文件

    java结合jsp写的上传文件代码

    if (fileItem == null || fileItem.isFormField()) { continue; } // 得到文件的完整路径 path = fileItem.getName(); // 得到文件的大小 size = fileItem.getSize(); if ("".equals(path) || size == 0) { out....

    commons-fileupload-1.2.2.jar必须依赖包.rar

    我们通常在lib文件夹中存放从外部引入的jar包  3、找到我们要引入的jar包,鼠标选中jar包,然后按住鼠标左键不放,把jar包拖到lib文件夹中。或先复制jar包,然后在lib文件夹上右击,选择复制。此时,打开选择框,...

    Jsp文件上传下载(工具类源码)

    if (fileItem == null || fileItem.isFormField()) { continue; } // 得到文件的完整路径 path = fileItem.getName(); // 得到文件的大小 size = fileItem.getSize(); if ("".equals(path) || size == 0) { ...

    org.apache.commons.fileupload 文件上传至数据库

    NULL 博文链接:https://weideming.iteye.com/blog/1229692

    文件上传组件commons-fileupload用户指南

    文件上传组件commons-fileupload用户指南文件上传组件commons-fileupload用户指南

    ASP.NET-MVC-File-Manager:使用 ASP.NET MVC 用 C# 编写的全功能文件管理器示例项目

    文件管理器被写在一个单独的区域中,这意味着它可以完全独立于主项目。 这是最新更新的屏幕截图( 2018/08/08 ): 注意:该项目正在开发中,存在很多错误,因此您应该将其视为BETA版本。 入门 要让文件管理器...

    commons-fileupload-1.2.jar和commons-io-1.3.2.jar

    FileItem item = (FileItem) iter.next(); // 忽略其他不是文件域的所有表单信息 if (!item.isFormField()) { String name = item.getName(); long size = item.getSize(); if ((name == null || name....

    Apache Commons fileUpload实现文件上传

    将Apache的commons-fileupload.jar放在应用程序的WEB-INF\lib下,即可使用。下面举例介绍如何使用它的文件上传功能。 所使用的fileUpload版本为1.2,环境为Eclipse3.3+MyEclipse6.0。FileUpload 是基于 Commons IO的...

    fckeditor for jsp 的jar包

    将请求的字符集编码设置成项目中的编码,在ConnectorServlet.java和SimpleUploaderServlet.java两个文件中的DiskFileUpload upload = new DiskFileUpload();后面加入upload.setHeaderEncoding(encoding);告诉...

    comm-fileupload教程

    * 设置文件过滤器,不符合过滤器规则的将不被上传 * @param filter */ public void setFilter(UploadFileFilter filter) { this.filter = filter; } /** * 验证文件是否有效 * @param item * @return *...

    jspsmartupload

    jspsmartuploa.jar 是一个很好用的文件上传下载工具报。适合与小项目。里面有丰富的源码示例, 还有使用说明两份,非常...FileItem item = (FileItem) iter.next(); // 忽略其他不是文件域的所有表单信息 ..........

Global site tag (gtag.js) - Google Analytics