关于文件下载

Action代码
  1. package org.rm.action;   
  2.   
  3. import java.io.FileInputStream;   
  4. import java.io.OutputStream;   
  5. import java.net.URLEncoder;   
  6. import java.util.List;   
  7. import javax.servlet.http.HttpServletResponse;   
  8. import org.rm.model.FileUpload;   
  9. import org.rm.service.FileUploadService;   
  10. import com.opensymphony.webwork.ServletActionContext;   
  11. import com.opensymphony.xwork.ActionSupport;   
  12. import com.opensymphony.xwork.ModelDriven;   
  13. /**  
  14.  * @author 作者 zhenggang E-mail:  
  15.  * @version 创建时间:2007-5-17 下午05:52:59  
  16.  * 类说明  
  17.  */  
  18. public class FileDownloadAction extends ActionSupport implements ModelDriven{   
  19.        
  20.     private FileUploadService fileuploadService;   
  21.     private FileUpload fileinfo = new FileUpload();   
  22.     private List listfile;   
  23.   
  24.    // private String filepath;   
  25.        
  26.     public String execute() throws Exception {   
  27.         //创建、获得当前的Response 对象   
  28.         HttpServletResponse response = ServletActionContext.getResponse();   
  29.         //把页面传来的文件名、文件路径做为方法“fileDownload”的参数   
  30.         fileDownload(response, fileinfo.getFilepath(), fileinfo.getFileFilename());   
  31.            
  32.         return SUCCESS;   
  33.     }   
  34.        
  35.     public String fileDownload(HttpServletResponse response,String filepath, String filename) throws Exception{   
  36.         response.reset();   
  37.         response.setContentType("application/x-download");// 设置为下载application/x-download   
  38.         String filenamedownload = filepath;   
  39.         String filenamedisplay = filename;   
  40.         filenamedisplay = URLEncoder.encode(filenamedisplay, "UTF-8");   
  41.         response.addHeader("Content-Disposition""attachment;filename="+ filenamedisplay);   
  42.            
  43. //      String aa=new String();   
  44. //      aa.substring(aa.lastIndexOf("."), aa.length()).equals(".jpg");   
  45.            
  46.         OutputStream output = null//输出流写文件   
  47.         FileInputStream fis = null//文件输入流读文件   
  48.         try {   
  49.             output = response.getOutputStream();   
  50.             fis = new FileInputStream(filenamedownload+"/"+filename);   
  51.             byte[] b = new byte[1024]; //字节数组   
  52.             int i = 0;   
  53.             while ((i = fis.read(b)) > 0) {   
  54.                 output.write(b, 0, i);   
  55.             }   
  56.             output.flush(); //清空缓冲区   
  57.         } catch (Exception e) {   
  58.             e.printStackTrace();   
  59.         } finally { //关闭流   
  60.             if (fis != null) {   
  61.                 fis.close();   
  62.                 fis = null;   
  63.             }   
  64.             if (output != null) {   
  65.                 output.close();   
  66.                 output = null;   
  67.             }   
  68.         }   
  69.         return null;       
  70.     }   
  71.     public String input(){   
  72.         listfile = fileuploadService.getAllFileInfo();   
  73.   
  74.         for(int i=0; i
  75.             FileUpload f = (FileUpload)listfile.get(i);   
  76.             System.out.println(f.getFileFilename()+"\t"+f.getFilepath());   
  77.         }   
  78.            
  79.         return INPUT;   
  80.            
  81.     }   
  82.   
  83.     public Object getModel() {   
  84.   
  85.         return fileinfo;   
  86.     }   
  87.     public void setFileuploadService(FileUploadService fileuploadService) {   
  88.         this.fileuploadService = fileuploadService;   
  89.     }   
  90.     public List getListfile() {   
  91.         return listfile;   
  92.     }   
  93.   
  94. }    
页面文件:fileshow.ftl
  1. 显示文件   
  2. <#list listfile as l>  
  3.     <table>  
  4.         <tr>  
  5.             <td>  
  6.         <a href="filedownload.do?model.filepath=${l.filepath}&model.fileFilename=${l.fileFilename}">${l.fileFilename}a>    
  7.             td>  
  8.             <td>  
  9.                 <a href="deletefile.do?model.id=${l.id}">删除a>  
  10.             td>  
  11.         tr>  
  12.         <#if l.fielContentType="1">  
  13.         <tr>  
  14.             <td ><img width="200" height="150" id="3" src="${l.filepath}${l.fileFilename}" border=0>td>  
  15.         tr>  
  16.         #if>  
  17.            
  18.     table>  
  19. #list>  
  20. <p><a href="fileupload!input.do">继续添加a>  
控制台信息:
 
  1. 17:11:15.156 ERROR! [SocketListener0-1] com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:237) >17> Could not execute action  
  2. java.lang.StringIndexOutOfBoundsException: String index out of range: -1  
  3.     at java.lang.String.substring(String.java:1762)  
  4.     at org.rm.action.FileDownloadAction.fileDownload(FileDownloadAction.java:54)  
  5.     at org.rm.action.FileDownloadAction.execute(FileDownloadAction.java:40)  
  6.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  7.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)  
  8.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)  
  9.     at java.lang.reflect.Method.invoke(Method.java:585)  
  10.     at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:364)  
  11.     at com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:216)  
  12.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:190)  
  13.     at com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:168)  
  14.     at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)  
  15.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  16.     at com.opensymphony.xwork.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:115)  
  17.     at com.opensymphony.xwork.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)  
  18.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  19.     at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)  
  20.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  21.     at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)  
  22.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  23.     at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)  
  24.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  25.     at com.opensymphony.webwork.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:171)  
  26.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  27.     at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)  
  28.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  29.     at com.opensymphony.webwork.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:147)  
  30.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  31.     at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)  
  32.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  33.     at com.opensymphony.xwork.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:151)  
  34.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  35.     at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)  
  36.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  37.     at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)  
  38.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  39.     at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:31)  
  40.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  41.     at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:186)  
  42.     at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:188)  
  43.     at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:113)  
  44.     at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:225)  
  45.     at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:202)  
  46.     at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)  
  47.     at com.opensymphony.webwork.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:88)  
  48.     at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:821)  
  49.     at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:471)  
  50.     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568)  
  51.     at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)  
  52.     at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633)  
  53.     at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)  
  54.     at org.mortbay.http.HttpServer.service(HttpServer.java:909)  
  55.     at org.mortbay.http.HttpConnection.service(HttpConnection.java:820)  
  56.     at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)  
  57.     at org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)  
  58.     at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)  
  59.     at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)  
  60.     at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)  

java.lang.StringIndexOutOfBoundsException: String index out of range: -1 

有人知道上面这个提示是什么意思吗?

你可能感兴趣的:(问题,Java,Webwork,Servlet,SUN,F#)