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.