笔记:将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>();


}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值