`
chyx72
  • 浏览: 35477 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

struts2文件上传下载

    博客分类:
  • JAVA
阅读更多
1.上传页面
*<form action="对应上传的Action" enctype="multipart/form-data" method="post">
*文件上传框:<input type="file" id="upload_file" name="file"/> 此file必须和Action中的File file同名,并且文件名必须是fileFileName(struts2会自动填充文件名)
*form提交的按钮(可以直接用submit按钮,也可以写在js里)
<form action="${pageContext.request.contextPath}/pfl/attachment/saveAttachmentAction.action" enctype="multipart/form-data" method="post" id="uploadAttachmentForm" >
    <div class="row">
        <div class="row_table_top">
            <div class="row_table_top_left"><img src="${pageContext.request.contextPath}/system/assets/images/point_down.gif" width="7" height="8" /><fmt:message key="pfl.system.attachment.upload"/></div>
        </div>

        <div class="row_table_middle">
            

            <table width='100%' align=center height='200' cellspacing="0" cellpadding="0" border="0">
                <tr class="trform"><td colspan="2">

                </td></tr>

                <tr class="trform"><th valign="top">
                    <div align="right"><fmt:message key="pfl.system.attachment.select_file" /><fmt:message key="global.maohao"/></div>
                </th>
                    <td valign="top" style="">
                        <div align="left"><input type="file" id="upload_file" name="file"/></div>
                    </td>
                </tr>

                <tr class="trform">
                    <th valign="top"><div align="right">&nbsp;</div></th>
                    <td align="left">
                        <div align="left">
                            <input type="button" class="button2" id="go_ul" onclick="uploadAttachment();" value="<fmt:message key="pfl.system.attachment.submit"/>" />
                            &nbsp;&nbsp;&nbsp;
                            <input type="button" name="back" id="back" class="button2"  onclick="win_close();"  value="<fmt:message key="pfl.system.attachment.close" />"/>
                        </div>
                    </td>
                </tr>
            </table>

        </div>

    </div>
</form>

2.下载页面
*访问下载的Action(通过id获得不同文件)
<div id="docs" style="">
                                                    <c:forEach items="${contractAttachmentList}" var="contractAttachment">
                                                                     <span id="${contractAttachment.id}">
                                                                         <input type="hidden" name="contractAttachment.id" value="${contractAttachment.id}"/>
                                                                         <a href="${pageContext.request.contextPath}/pfl/attachment/downloadAttachmentAction.action?id=${contractAttachment.id}">${contractAttachment.name}</a>
                                                                     </span>
                                                    </c:forEach>
                                                </div>
3.Action
public class ContractAttachmentAction extends ActionSupport {

    private ContractAttachment contractAttachment;

    private IContractAttachmentService contractAttachmentService;

    private File file;
    private String fileFileName;
    private String fileContentType;
    private String savePath;

    private String path;

    private String downloadFile;
    private String downloadFileName;

    public String showupload(){
        HttpServletRequest request = ServletActionContext.getRequest();
        String id = request.getParameter("id");
        request.setAttribute("id",id);
        return "showupload";
    }

    public String save(){
        Date currentDate = UtilTools.getCurrentDate();
        HttpServletRequest request = ServletActionContext.getRequest();
        try{
            String contractID = request.getParameter("contractID");
            upload();
            if(contractID!=null&&!contractID.equals("")){
                contractAttachment.setCid(Integer.parseInt(contractID));
            }
            contractAttachment.setName(fileFileName);
            contractAttachment.setPath(path);
            contractAttachment.setCreateTime(currentDate);

            contractAttachmentService.saveOrUpdate(contractAttachment);
            request.setAttribute("success","success");
            request.setAttribute("contractAttachment",contractAttachment);
            return "showupload";
        }catch (Exception e){
            e.printStackTrace();
        }
        return "failure";
    }

    public String update(){

        try{
            contractAttachmentService.update(contractAttachment);
            return "update";
        }catch (Exception e){
            e.printStackTrace();
        }
        return "failure";
    }

    public String delete(){
//        HttpServletResponse response=  ServletActionContext.getResponse();
//        PrintWriter writer=null;
//        response.setContentType("text/text;charset=UTF-8");

        HttpServletRequest request = ServletActionContext.getRequest();
        savePath=ServletActionContext.getServletContext().getRealPath("/")+"uploads";
        File f=null;

        String id = request.getParameter("id");
        if(id==null&&id.trim().equals("")){return "failure";}
        try{
//            writer=response.getWriter();
            contractAttachment = contractAttachmentService.get(Integer.parseInt(id));

            f = new File(savePath,contractAttachment.getPath());

            if(f!=null){
                f.delete();
                //返回1代表删除成功
//                writer.write("1");
            }
//            else{
//                writer.write("0");
//            }
        }catch (Exception e){
            e.printStackTrace();
        }
        contractAttachmentService.delete(contractAttachment);
        return null;
    }

    public String download(){


        return "download";
    }

    public void upload() throws Exception {
        savePath=ServletActionContext.getServletContext().getRealPath("/")+"uploads";//获得上传文件放置的目录,可以自己定义,绝对路径
        System.out.println(savePath);

        String formatDate = UtilTools.getBussinessNoByDate();//获得当前时间
        int position = fileFileName.lastIndexOf(".");//文件后缀名
        String extension = fileFileName.substring(position);
        int random = new Random().nextInt(1000);//获得的是随机数字,用于构造文件名
        path = formatDate + random + extension;//已经构造号的文件名

        System.out.println(path);

        InputStream is = new FileInputStream(file);//读取上传页面过来的文件流
        System.out.println(fileFileName);
        System.out.println(fileContentType);
        File destFile = new File(savePath,path);//创建需写入的文件

        if(!destFile.exists()){
            destFile.createNewFile();
        }
        OutputStream os = new FileOutputStream(destFile);
        byte[] buffer = new byte[1024];
        int length = 0 ;
        while((length = is.read(buffer)) > 0){
            os.write(buffer, 0, length);//写入
        }

        is.close();
        os.close();

    }

    public ContractAttachment getContractAttachment() {
        return contractAttachment;
    }

    public void setContractAttachment(ContractAttachment contractAttachment) {
        this.contractAttachment = contractAttachment;
    }

    public IContractAttachmentService getContractAttachmentService() {
        return contractAttachmentService;
    }

    public void setContractAttachmentService(IContractAttachmentService contractAttachmentService) {
        this.contractAttachmentService = contractAttachmentService;
    }

    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }

    public String getFileFileName() {
        return fileFileName;
    }

    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }

    public String getFileContentType() {
        return fileContentType;
    }

    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }

    public String getSavePath() {
        return savePath;
    }

    public void setSavePath(String savePath) {
        this.savePath = savePath;
    }
    //从下载文件原始存放路径读取得到文件输出流
    public InputStream getDownloadFile(){
        HttpServletRequest request = ServletActionContext.getRequest();
        savePath=ServletActionContext.getServletContext().getRealPath("/")+"uploads\\";
        String id = request.getParameter("id");

        InputStream fileInputStream = null;
        try {
            if(id!=null&&!id.trim().equals("")){
                contractAttachment = contractAttachmentService.get(Integer.parseInt(id));
                downloadFile = savePath+contractAttachment.getPath();//下载文件绝对地址
                downloadFileName = new String(contractAttachment.getName().getBytes(),"ISO-8859-1");//避免中文乱码
            }
            fileInputStream = new FileInputStream(downloadFile);//手动new一个InputStream获得下载文件流
        } catch (Exception e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }

        return fileInputStream;

    }

    public void setDownloadFile(String downloadFile) {
        this.downloadFile = downloadFile;
    }

    public String getDownloadFileName() {
        return downloadFileName;
    }
}

4.配置
<package name="pfl-attachment" namespace="/pfl/attachment" extends="struts-default">
        <action name="*AttachmentAction" method="{1}" class="contractAttachmentAction">
            <result name="showupload">/pfl/system/contract/uploadAttachment.jsp</result>
            <result name="download" type="stream">
                <!-- 下载文件类型定义(通用类型) -->
                <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
                <!-- 下载文件输出流定义,会找Action中的InputStream getDownloadFile() -->
                <param name="inputName">downloadFile</param>
                <!-- 下载文件处理方法,获得下载的文件名(Action中的getDownloadFileName() ) -->
                <param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
                <param name="bufferSize">4096</param>                
            </result>
            <result name="failure">/error.jsp</result>
            <result name="input">/error.jsp</result>
            <interceptor-ref name="defaultStack">
                <param name="fileUpload.maximumSize">10240000</param>
                <!--<param name="fileUpload.allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg ,image/x-png, image/pjpeg</param>-->
            </interceptor-ref>
        </action>
    </package>
分享到:
评论

相关推荐

    struts2文件上传下载源代码

    在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...

    struts2文件上传下载实例

    在“struts2文件上传下载实例”中,我们将探讨如何在Struts2框架下实现文件的上传和下载功能,这对于许多Web应用程序来说是必不可少的特性。 首先,`pom.xml`文件是Maven项目对象模型的配置文件,它定义了项目的...

    Struts2文件上传下载和表单重复提交问题

    综上所述,Struts2文件上传下载和表单重复提交涉及多个技术点,包括Struts2的配置、文件操作、HTTP响应头设置、安全性和异常处理。理解并熟练掌握这些知识点,对于构建健壮的Web应用程序至关重要。

    struts2文件上传下载(注解版)

    在本项目中,我们关注的是Struts2中的文件上传和下载功能,这些功能是Web开发中常见的需求,尤其在处理用户数据提交或提供资源下载时。下面将详细介绍这个“struts2文件上传下载(注解版)”项目的关键知识点。 1. ...

    struts2实现文件上传下载

    Struts2是一个强大的MVC(模型-视图-控制器)框架,广泛应用于Java ...以上就是使用Struts2框架实现文件上传下载的基本步骤和关键知识点。在实际开发中,可以根据项目需求进行调整和优化,确保功能的稳定性和安全性。

    struts2 文件上传下载

    在Struts2中,文件上传和下载是常见的功能,它们允许用户从服务器上下载文件或向服务器上传文件。理解并掌握这一部分的知识对于开发交互性强的Web应用至关重要。 ### 一、文件上传 1. **使用Struts2的FileUpload...

    Struts2文件上传下载

    在Struts2中,文件上传和下载是常见的功能,它们使得用户能够交互地处理文件,如上传图片、文档或者下载资源。下面我们将深入探讨如何利用Struts2实现文件上传和下载。 一、文件上传 1. 配置Struts2核心拦截器:...

    第八章:struts2文件上传下载.ppt

    第八章:struts2文件上传下载.ppt

    Struts2文件上传下载 中文乱码

    在Struts2框架中,文件上传和下载是常见的功能需求,但处理中文文件名或内容时,可能会遇到中文乱码的问题。这个问题主要涉及到字符编码的处理,包括HTTP请求的编码、文件名的编码以及文件内容的编码。接下来,我们...

    struts2文件上传与下载

    在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...

    Struts2文件上传与下载

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...

    struts2 文件上传

    Struts2 文件上传是Web开发中的一个重要功能,它允许用户通过网页上传文件到服务器。Struts2 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,提供了丰富的特性和强大的控制层功能,使得文件上传...

Global site tag (gtag.js) - Google Analytics