java - Struts2 File Download Permission Denied -
i have struts2 webapp running on tomcat 7 server. i'm trying allow user download file server.
when running eclipse tomcat server , accessing localhost, have no issues downloading files.
however when deploy onto server, when clicking on download link, following exception:
java.io.filenotfoundexception: /var/tmp/myfile.pdf (permission denied) java.io.fileinputstream.open(native method) java.io.fileinputstream.<init>(fileinputstream.java:146) com.my.path.to.action.updateaction.execute(updateaction.java:201) sun.reflect.nativemethodaccessorimpl.invoke0(native method) sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) java.lang.reflect.method.invoke(method.java:606) com.opensymphony.xwork2.defaultactioninvocation.invokeaction(defaultactioninvocation.java:446) com.opensymphony.xwork2.defaultactioninvocation.invokeactiononly(defaultactioninvocation.java:285) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:248) org.apache.struts2.interceptor.debugging.debugginginterceptor.intercept(debugginginterceptor.java:256) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.defaultworkflowinterceptor.dointercept(defaultworkflowinterceptor.java:176) com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:98) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.validator.validationinterceptor.dointercept(validationinterceptor.java:265) org.apache.struts2.interceptor.validation.annotationvalidationinterceptor.dointercept(annotationvalidationinterceptor.java:68) com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:98) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.conversionerrorinterceptor.intercept(conversionerrorinterceptor.java:138) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.parametersinterceptor.dointercept(parametersinterceptor.java:238) com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:98) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.parametersinterceptor.dointercept(parametersinterceptor.java:238) com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:98) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.staticparametersinterceptor.intercept(staticparametersinterceptor.java:191) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) org.apache.struts2.interceptor.multiselectinterceptor.intercept(multiselectinterceptor.java:73) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) org.apache.struts2.interceptor.checkboxinterceptor.intercept(checkboxinterceptor.java:91) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) org.apache.struts2.interceptor.fileuploadinterceptor.intercept(fileuploadinterceptor.java:252) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.modeldriveninterceptor.intercept(modeldriveninterceptor.java:100) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.scopedmodeldriveninterceptor.intercept(scopedmodeldriveninterceptor.java:141) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.chaininginterceptor.intercept(chaininginterceptor.java:145) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.prepareinterceptor.dointercept(prepareinterceptor.java:171) com.opensymphony.xwork2.interceptor.methodfilterinterceptor.intercept(methodfilterinterceptor.java:98) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.i18ninterceptor.intercept(i18ninterceptor.java:176) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) org.apache.struts2.interceptor.servletconfiginterceptor.intercept(servletconfiginterceptor.java:164) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.aliasinterceptor.intercept(aliasinterceptor.java:193) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) com.opensymphony.xwork2.interceptor.exceptionmappinginterceptor.intercept(exceptionmappinginterceptor.java:187) com.opensymphony.xwork2.defaultactioninvocation.invoke(defaultactioninvocation.java:242) org.apache.struts2.impl.strutsactionproxy.execute(strutsactionproxy.java:54) org.apache.struts2.dispatcher.dispatcher.serviceaction(dispatcher.java:544) org.apache.struts2.dispatcher.ng.executeoperations.executeaction(executeoperations.java:77) org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter.dofilter(strutsprepareandexecutefilter.java:91)
here action download file
action.java
private inputstream fileinputstream; public inputstream getfileinputstream() { return fileinputstream; } public string execute() throws exception { file filetodownload = new file("/var/tmp/myfile.pdf"); system.out.print(filetodownload.getname()); filename = filetodownload.getname(); contentlength = filetodownload.length(); fileinputstream = new fileinputstream(filetodownload); return success; }
i've checked on file make sure file exists @ specified location , does. i've entered incorrect file name , error saying can't find specified file (which means can read directory , determine doesn't exist.)
here struts.
struts.xml
<action name="download" class="com.my.path.to.action.updateaction"> <result name="success" type="stream"> <param name="contentdisposition">attachment;filename=${filename}</param> <param name="contenttype">application/doc</param> <param name="inputname">fileinputstream</param> <param name="buffersize">4096</param> <param name="contentlength">${contentlength}</param> </result> </action>
to make sure no 1 confused, changed path in files accessed between windows path (which works) , linux path (which doesn't).
additionally, server running on ubuntu 12.04 server. if question should relocated different forum, please let me know.
this linux permissions issue. tomcat server running system user. user doesn't have permission path /var/tmp/ . need system administrator determine user that's running tomcat , provide access /var/tmp. and, yes, question not java question, system one.
Comments
Post a Comment