得到项目根目录,下载文件相关

来源:互联网 发布:算法分析的目的 编辑:程序博客网 时间:2024/05/29 11:40

1.在开发Web项目中,得到项目根目录有以下几种方式:

 

(1).当可以得到request对象的时候:

  String filePath = request.getRealPath("excels");

 

 @Context

 private org.apache.cxf.jaxrs.ext.MessageContext mc;

 以下在方法内部

 HttpServletRequest req =mc.getHttpServletRequest();

 String filePath = req.getRealPath("excels");

 

(2).当无法得到request对象的时候:(这里需要在jsp中或是继承HttpServlet的类)

  ServletContext context = super.getServletContext();

  String filePath = context.getRealPath("/excels");

 

 

2.生成文件随机名字的方式: fileName =UUID.randomUUID().toString()+".xls";

 

3.生成随机文件下载方式:

  (1)利用SmartUpload

  <%@ page import="com.jspsmart.upload.*"%>

  <%

  try {

  SmartUpload su = new SmartUpload();

  su.initialize(pageContext);

  su.downloadFile(request.getRealPath("excels") + "//"

  + request.getParameter("exportContent"));

  out.clear(); 

  out = pageContext.pushBody();

  } catch (Exception e) {

 

  }

  %> 

(2).<%

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html; charset=UTF-8");

//防止IE缓存        

response.setHeader("pragma","no-cache");        

response.setHeader("cache-control","no-cache");        

response.setDateHeader("Expires",0);    

response.setContentType("APPLICATION/OCTET-STREAM"); 

response.setHeader("Content-Disposition", "attachment;"); 

String objectID = request.getParameter("objectID") == null ? "" : request.getParameter("objectID");

SysModel sysmodel = ModelFactory.getSysmodel();

SysPersistence persistence = PersistenceFactory.getInstance(sysmodel);

String sql="";

sql="select  FILEEXT, Name " +

"from SysComm_FileImg  where Is_del = '0' and FD_OBJECTID="+objectID;

System.out.println(sql);

ArrayList<String[]> list= persistence.getSearchResult(110, sql);

String[] data=(String[])list.get(0);

String filename=data[1]+"."+data[0];

response.setHeader("Content-Disposition", "attachment; filename=/""+java.net.URLEncoder.encode(filename,"UTF-8")+"/""); 

ServletOutputStream sout=null;

try {

SysModel sysmodelimg = ModelFactory.getSysmodel();

SysPersistence persistenceimg = PersistenceFactory.getInstance(sysmodelimg);

sout = response.getOutputStream();

persistenceimg.readBlobToOutputStream(110,objectID,"FileContents",sout);

out.clear();

out = pageContext.pushBody();

}catch (Exception e) {

e.printStackTrace();

System.out.println(e.toString());

}finally{

sout.close();

}

%>

4.文件下载后需要删除临时文件,删除有两种方式
(1)、在下载方法中添加一个线程,下载后立即删除该文件:
 //删除生成的Excel文件
final String filep = filePath + "//" + fileName;
new Thread(new Runnable(){
public void run()
{
try
{
Thread.sleep(50000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
//System.out.println("文件路径:" + filep);  
File fi = new File(filep);
//System.out.println(fi.getName());
//System.out.println(fi.exists());
//System.out.println(fi.delete());//删除临时文件 
fi.delete();  //删除文件失败,文件存在且路径也正确,删除失败可能是下载该文件的流没有关闭
}
}).start();
(2)、创建一个Servlet,在服务启动的时候删除
 public class DeleteFileServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public DeleteFileServlet() {
super();
}
/**
* 在服务启动时,删除公路基础数据下载生成的Excel临时文件
*/
public void init(ServletConfig config) throws ServletException {
super.init(config);
ServletContext context = getServletContext();
String filePath = context.getRealPath("/excels");//获得模板文件的路径
File file = new File(filePath);
System.out.println(filePath);
File[] subFiles = file.listFiles(new FileFilter() {
public boolean accept(File pathname) {
if (pathname.getName().endsWith("xls")) {
return true;
}
return false;
}
});
for (File f : subFiles) {
f.delete();
}
}
}
Web.xml中配置文件:
  <servlet>
    <servlet-name>DeleteFileServlet</servlet-name>
    <servlet-class>com.sinosoft.common.printExcel.DeleteFileServlet</servlet-class>
    <load-on-startup>8</load-on-startup>
  </servlet>
原创粉丝点击