large size file with <s:resource> and <s:download>, 403 error
lit0908 Aug 3, 2012 2:46 AMHi,
What I am trying to do is a file download page. It works fine for small size file(probably less than 100MB), but when I try to download a large size file, it give me a page with "HTTP Status 403 - Access to the requested resource has been denied"。
Don't know why is this happening and really new to this area. I have searched the forum, but nothing helped.
Here is my code.
web.xml
<!-- Document Store Servlet --> <servlet> <servlet-name>Document Store Servlet</servlet-name> <servlet-class>org.jboss.seam.document.DocumentStoreServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Document Store Servlet</servlet-name> <url-pattern>/seam/docstore/*</url-pattern> </servlet-mapping>
fileDownloadTest.xhtml
<rich:panel> <f:facet name="header">Files Uploaded</f:facet> <div class="results"> <h:outputText value="No files exists" rendered="#{empty attachmentList}"/> <rich:dataTable id="attachmentList" var="entry" value="#{attachmentList}" rendered="#{not empty attachmentList}"> <rich:column> <f:facet name="header">File Name</f:facet> <s:link value="#{entry.name}"/> </rich:column> <rich:column> <f:facet name="header">Content Type</f:facet> #{entry.type} </rich:column> <rich:column> <f:facet name="header">Size(bytes)</f:facet> #{entry.size} </rich:column> <rich:column> <f:facet name="header">Action</f:facet> <s:download src="/resources.xhtml"> Download <f:param name="attachmentId" value="#{entry.id}"></f:param> </s:download> </rich:column> </rich:dataTable> </div> </rich:panel>
resources.xhtml
<s:resource xmlns="http://www.w3.org/1999/xhtml" xmlns:s="http://jboss.com/products/seam/taglib" data="#{attachmentDownloadManager.file}" contentType="#{attachmentDownloadManager.contentType}" fileName="#{attachmentDownloadManager.fileName}" />
resources.page.xml
<page xmlns="http://jboss.com/products/seam/pages" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.com/products/seam/pages http://jboss.com/products/seam/pages-2.2.xsd" action="#{attachmentDownloadManager.prepareDoc()}"> </page>
AttachmentDownloadManagerAction.java
@Stateful @Name("attachmentDownloadManager") @Scope(ScopeType.EVENT) public class AttachmentDownloadManagerAction implements AttachmentDownloadManager{ @Logger private Log log; @PersistenceContext(type = PersistenceContextType.EXTENDED) private EntityManager em; @RequestParameter private Long attachmentId; private File file; private String fileName; private String contentType; @Factory("attachmentList") public List<Attachment> getAttachmentList(){ List<Attachment> list = new ArrayList<Attachment>(); list = em.createQuery("select a from Attachment a").getResultList(); return list; } public void prepareDoc(){ log.info("prepareDoc() Id-" + attachmentId); Attachment attachment = em.find(Attachment.class, attachmentId); this.fileName = attachment.getName(); this.contentType = attachment.getType(); file = new File(attachment.getLocation() + attachment.getName()); log.info("prepareDoc() File ready"); } public File getFile() {return file;} public void setFile(File file) {this.file = file;} public String getFileName() {return fileName;} public void setFileName(String fileName) {this.fileName = fileName;} public String getContentType() {return contentType;} public void setContentType(String contentType) {this.contentType = contentType;} @Remove public void destroy(){ } }
Thanks for your time and help in advance.