利用struts2下载缓存于内存中的文件
因为工作需要,要把被下载的文件缓存在内从中供用户下载,提高响应速度,降低硬盘I/O负担.通过一段时间的资料查找终于将这个问题给搞定了.
1.将文件缓存与内存中,大致代码如下.
?
?
?3.配置完成以后贴出下载的action方法
?
import java.io.InputStream;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.util.ServletContextAware;import com.opensymphony.xwork2.ActionSupport;public class GameDownloadAction extends ActionSupport implements ServletContextAware,ServletRequestAware {/** * */private static final long serialVersionUID = 1L;HttpServletRequest request;private String fileName;//渠道名称private byte[] in;public String formateString(String str){if(null == str){return "";}return str.trim();}/** * 下载文件 * @return */public String getGameFile(){if(GameFileCache.MAP_DOWNLOAD.size() > 0){if(!fileName.isEmpty()){in = GameFileCache.MAP_DOWNLOAD.get(fileName);//获取缓存中的文件}}return "getGameFile";}/** * 将文件缓存到内存中,渠道名称就是缓存到内存中的文件key值.filepath就是文件在硬盘中的路径 */public void setGameFile(){String channle = formateString(request.getParameter("channel"));//渠道名称String filePath = formateString(request.getParameter("file"));//文件路径GameFileCache.readFileToMemory(filePath, channle);}public InputStream getInputStream() throws Exception{return GameFileCache.byteToInputStream(in);}public void setServletContext(ServletContext arg0) {}public void setServletRequest(HttpServletRequest request) {this.request = request;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}}??
通过以上三个步骤就可以实现将多个文件缓存在内存中,供用户下载了,这样下载的时候就不用去读硬盘了,直接从内存读取,这样可以提高系统相应速度.
第一次写博客,请多指教.