`

用Action下载文件

阅读更多
package com.eaoa.uc.attachment.action;

import java.io.InputStream;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.eaoa.base.EABaseAction;
import com.eaoa.query.PubAttachmentQuery;
import com.eaoa.vo.PubAttachment;
import com.stony.core.util.CoreUtils;

/**
* Find a attachment from table "EAPT_ATTACHMENT" by attachmentno, and show it on page. 
* @author zhenglun.zhou
*
*/
public class AttachmentViewAction extends EABaseAction {

    protected ActionForward doWork(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response) {
   
    String attachmentnostr = request.getParameter("attachmentno");
    if(StringUtils.isBlank(attachmentnostr))
    return null;
   
    Long attachmentno = CoreUtils.parseLong(attachmentnostr);  
    PubAttachment attachment = PubAttachmentQuery.loadByNo(attachmentno);

//扩展名和文件名
String extname = attachment.getExtendname().toLowerCase();
String filename = attachment.getAttachmentname();

//设置response
setIsStream(response);
response.reset(); //清除response的buffer
if (extname.indexOf("bmp,jpeg,gif") != -1) {
response.setContentType("image/"+extname);
} else if ("jpg".equals(extname)) {
response.setContentType("image/jpeg");
} else if ("xls".equals(extname)) {
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-disposition", "attachment; filename="+filename);
} else if ("doc".equals(extname)) {
response.setContentType("application/msword; charset=gb2312");
response.setHeader("Content-disposition", "attachment; filename="+filename);
} else if ("ppt".equals(extname)) {
response.setContentType("application/vnd.ms-powerpoint; charset=gb2312");
response.setHeader("Content-disposition", "attachment; filename="+filename);
}else{
response.setHeader("Content-disposition", "attachment; filename="+filename);
}

//输出流
InputStream ins = null;
try {
ins = attachment.getContent().getBinaryStream();
ServletOutputStream outs = response.getOutputStream();
int blobsize = (int) attachment.getContent().length();
byte[] blobbytes = new byte[blobsize];
int bytesRead = 0;
while ((bytesRead = ins.read(blobbytes)) != -1) {
outs.write(blobbytes, 0, bytesRead);
}
ins.close();
outs.flush();
outs.close();
} catch (Exception e) {
}
return null;     
    }
}
分享到:
评论

相关推荐

    FTP上传,删除,下载文件的工具类(可供Action/Controller层使用)

    FTP上传,删除,下载文件的工具类(可供Action/Controller层使用) FtpUtil.uploadFileFromProduction(hostname, port, username, password, pathname, filename, originfilename);

    action下载

    在Struts2中,实现文件下载需要在配置文件`struts.xml`中定义相应的Action和结果类型。以下是一个基本的配置示例: ```xml <action name="fileDown" class="it.com.down.FileDown"> ...

    Struts的文件下载

    在Struts中,我们通常会创建一个Action类来处理文件下载的逻辑。这个Action类需要获取到待下载文件的路径或流,并设置适当的HTTP响应头,包括Content-Disposition(用于指定文件名)和Content-Type(用于标识文件...

    Struts2上传和下载Action配置

    在Struts2中,文件上传和下载是通过Action类进行配置和处理的,让我们一起深入了解一下这个过程。 首先,我们要理解上传的流程。在用户端,通常通过HTML表单来选择要上传的文件,表单的`enctype`属性必须设置为`...

    asp.net多文件下载 MVC多文件下载

    这个场景通常出现在用户需要一次性获取多个相关文件,如报告、文档或图片等。本篇将详细介绍如何在ASP.NET MVC中实现这一功能。 首先,我们需要理解ASP.NET MVC的核心概念,包括控制器(Controller)、视图(View)...

    struts2实现文件下载功能

    在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...

    FinalBuilder 自定义修改INI文件值Action

    自己用 FinalBuilder Action Studio 自定义修改INI文件值Action,源码

    Spring in Action 中文版 第五部分(Spring in Action CN.005)

    Spring in Action CN.001<br>Spring in Action CN.002<br>Spring in Action ...Action CN.007<br>Spring in Action CN.008<br>Spring in Action CN.BAT<br><br>Spring in Action 中文版的pdf文件较大... <br>本书信息: Craig Walls,...

    android下载word文档并打开

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

    strust2 上传下载文件

    在Struts2中,文件上传和下载功能是常见的需求,它允许用户在Web应用中交换文件,例如提交图片、文档或者下载资源。下面将详细讨论Struts2中的文件上传与下载实现,并涵盖相关知识点。 **1. 文件上传** 在Struts2...

    dotnet 通过 GitHub 的 Action 辅助下载国外资源文件的离线下载方法.rar

    压缩包内的 `dotnet 通过 GitHub 的 Action 辅助下载国外资源文件的离线下载方法.md` 文件,很可能是详细说明这个过程的文档,包括了具体的操作步骤、配置示例以及可能遇到的问题和解决方案。阅读这份文档将有助于你...

    Action——Action的配置和作用

    第二层,Action可以指struts.xml配置文件中的一个条目,这通常定义了Action类和浏览器请求之间的映射关系。最后一个含义,Action指的是Action类中的一个方法,这个方法被用来处理请求并返回处理结果。 接着,我们来...

    struts2文件上传下载源代码

    1. **配置Struts2 Action**:在`struts.xml`配置文件中,你需要定义一个Action,该Action负责处理文件上传请求。Action的类需要继承自`ActionSupport`,并覆盖`execute()`方法,以便处理上传的文件。 2. **设置...

    用struts1实现文件的上传和下载

    在这个Action中,你需要找到要下载的文件,然后设置响应头以指示浏览器进行文件下载。 3. **设置响应头**:在`execute()`方法中,使用`HttpServletResponse`设置响应头,如`Content-Disposition`(设置文件名)和`...

    java实现文件下载

    4. 文件下载的Action实现 对应的Action类,例如FileDownloadAction,需要包含方法来处理文件的读取和输入流的创建。Action类可能像下面这样实现: ```java public class FileDownloadAction extends ActionSupport ...

    UTKinect-Action数据库中xml数据读取成mat文件

    这个项目的目的就是将UTKinect-Action数据库中的XML数据转换为MAT文件,以便在MATLAB环境中进行高效处理。 首先,我们需要理解XML文件的结构。XML文件通常包含一系列的元素(elements),每个元素都有自己的属性...

    sharepoint 2007文档库,文件批理下载

    5. 手动打包:虽然不是自动化的解决方案,但你可以手动创建一个ZIP文件,将文档库中的所有文件打包在一起,然后提供这个ZIP文件供用户下载。这可以通过SharePoint的WebDAV功能或者通过编程方式实现,例如使用C#或VB...

    Action Form

    4. Action Form:这个文件没有明确的扩展名,可能是一个源代码文件、配置文件或者是特定环境下的项目文件,与Action Form的实现或配置有关。 综合以上信息,Action Form是Web开发中的一个重要组成部分,尤其在处理...

Global site tag (gtag.js) - Google Analytics