`
bruce198
  • 浏览: 236347 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

关于文件下载

阅读更多
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 

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

分享到:
评论

相关推荐

    Fish文库文档下载工具

    "Fish文库文档下载工具"的核心功能在于其对多种文档网站的兼容性,能够突破常规的在线预览限制,将文档转化为可本地存储的PDF文件。这样,用户就可以随时随地查阅,无需依赖网络连接,极大地提高了学习和工作的效率...

    在线文档下载器

    在线文档下载器可能使用此库来解析和处理从网站下载的PDF文件,确保用户可以本地存储和阅读这些文档。 “iDocDown.exe”是主程序执行文件,是在线文档下载器的核心部分。它包含了实现下载功能的算法和逻辑,能够...

    ajax实现java文件下载

    6. **新建 文本文档.txt**:这可能是示例中的一个测试文件,用于演示如何通过Ajax进行下载。在实际应用中,这个文件的名称和类型将由用户选择或由业务逻辑决定。 具体实现步骤: 1. **前端**:在JSP文件中,使用...

    【原创力文档下载工具】利用python下载原创力文档 .zip

    【原创力文档下载工具】利用Python下载原创力文档是一个典型的Web爬虫应用场景,它涉及到Python编程语言、网络请求、文件处理以及可能的HTML解析技术。在这个项目中,开发者使用Python来自动化获取并下载原创力平台...

    收费文档下载方法c.zip

    这些工具能够解析百度文库的页面,抓取文档内容并将其转换成本地文件。使用这类工具时,用户需要复制百度文库文档的网页链接,然后粘贴到工具的输入框内,按照提示进行操作。值得注意的是,这种方法可能受制于网站的...

    不需要会员的文档下载器

    标题 "不需要会员的文档下载器" 暗示了我们讨论的主题是关于一款能够帮助用户免费下载各种在线文档的工具,无需订阅或购买网站的会员服务。这种软件通常适用于那些提供付费阅读或下载服务的平台,例如学术论文库、...

    萝卜头文档下载器1.1

    萝卜头文档下载器是一款Windows端的免费文档下载工具,可以帮助我们下载各种常用文档,降低获取成本!软件下载好后无需安装,就可以直接打开使用。 界面非常的干净整洁,支持下载的范围也非常广泛,支持范文、协议书...

    豆丁网文件下载器

    豆丁网免费下载器(冰点)无需登录也无需积分,只需要将需要下载的文档的网页地址复制在软件的录入框中就可以自由下载,并最终生成pdf文件。对部分pdf文件能够提取文字生成txt。 豆丁网免费下载器还支持自由下载百度、...

    豆丁网免费下载工具,可把豆丁网文件下载成pdf文件

    总的来说,豆丁网免费下载工具是为了解决无法直接下载豆丁网文档的问题,它通过将网页转换为PDF格式,使用户能够离线阅读和保存文件。在使用过程中,用户应关注版权问题,合理使用工具,并掌握一定的PDF文件管理技巧...

    文档下载器.zip

    【描述】"文档下载器" 提供了一个集成化的解决方案,让用户能够轻松下载网络上的文档资源,特别是可能存在于各种文档分享平台上的PDF、SWF等格式的文件。它可能包含了用于处理不同文件类型的组件,以及一些支持程序...

    豆丁文档下载破解器

    豆丁文档下载破解器. 豆丁文档下载破解器. 豆丁文档下载破解器.

    文件下载的代码

    ASP.NET中提供可以在页面下载存储在后台的文件,很好用哦

    Visual Studio 2010 帮助文件下载助手

    visual studio 2010的帮助文档很难下载,一方面文件很多很大,全部文档超过1GB,使用微软自带的 或者辅助工具,由于没有发挥多线程和断点续传的特点,下载速度很慢,容易失败。 另一方面迅雷等下载工具,可以实现...

    国密文档下载链接

    国密规范文档所有标准稳当的下载链接,SM2/SM3/SM4/SM9等,各种国密产品检测规范

    冰点文档下载器,支持下载网页百度文档

    在提供的压缩包子文件“Fish-v324-0712”中,我们可以推测这可能是冰点文档下载器的一个版本,其中可能包含了软件的执行文件、帮助文档、许可证文件等组成部分。用户在下载这个压缩包后,需要解压并按照指示安装和...

    暴力文档下载器(可下载百度文库、豆丁网等需积分下载的文档)

    【暴力文档下载器】是一款专为解决在线文档平台如百度文库、豆丁网等需积分下载问题而设计的工具。这款下载器以其独特的“暴力”特性,绕过了平台的限制,使得用户无需消耗积分就能获取所需的文档资源,极大地便利了...

    Visual Studio 2012 官方离线文档 下载地址

    在"link.txt"文件中,很可能是提供了Visual Studio 2012官方离线文档的下载链接。下载后,用户可以通过文件浏览器打开这些.chm文件,通过内置的搜索功能查找所需的信息。同时,开发者还可以结合其他在线资源,如MSDN...

    android下载word文档并打开

    在Android平台上,开发一个应用程序以实现下载Word文档并顺利打开是一项常见的需求。下面将详细讲解这一过程中的关键知识点,以及如何结合给定的资源进行操作。 1. **Android权限管理**: 在Android中,访问网络和...

    百度文库文件免费下载最新

    总的来说,“冰点文库下载器”是一款解决在线文档下载难题的实用工具,它的出现反映了用户对知识资源共享的需求。然而,作为IT从业者,我们应当同时关注合规性和道德性,平衡好获取信息与尊重知识产权的关系。

Global site tag (gtag.js) - Google Analytics