ssh下载数据库blob+指定路径下文件

下载action代码如下:

/**
     * 下载
     */
    @Action(value = "download")
    public void download()
        throws Exception
    {
        String annexId = this.getRequest().getParameter("annexId");
        Annex annex = fileService.getAnnexById(annexId);
        if (annex == null)
        {
            return;
        }
        //数据库存的路径字段为空则blob下载
        if (!CommonUtil.isNotEmpty(annex.getAnnexPath()))
        {
            downFromOracle(annex);
        }
        else
        {
            downFromFile(annex);
        }
    }
    /**
     * 从服务器下载
     */
    private void downFromFile(Annex annex)
        throws IOException
    {
        String annexName = annex.getAnnexName();
        // String filePath = request.getSession().getServletContext().getRealPath(upPath) + "\\" + annexName;
        String filePath = upPath + "\\" + annexName;
        File file = new File(filePath); // 根据文件路径获得File文件
        // 文件名
        response.setHeader("Content-Disposition", "attachment;filename=\""
            + new String(annexName.getBytes("gb2312"), "ISO8859-1") + "\"");
        response.setContentLength((int)file.length());
        byte[] buffer = new byte[4096];// 缓冲区
        BufferedOutputStream output = null;
        BufferedInputStream input = null;
        try
        {
            input = new BufferedInputStream(new FileInputStream(file));
            output = new BufferedOutputStream(response.getOutputStream());
            int n = -1;

            // 遍历,开始下载
            while ((n = input.read(buffer, 0, 4096)) > -1)
            {
                output.write(buffer, 0, n);
            }
            output.flush(); // 不可少
            response.flushBuffer();// 不可少
        }
        catch (Exception e)
        {
            // 异常自己捕捉

        }
        finally
        {

            // 关闭流,不可少
            if (input != null)
                input.close();
            if (output != null)
                output.close();
        }
    }

    /**
     * 从数据库下载
     */
    private void downFromOracle(Annex annex)
        throws Exception
    {
        Blob blob = annex.getAnnexCont();
        String annexName = annex.getAnnexName();
        InputStream input = blob.getBinaryStream();
        // 文件名
        response.setHeader("Content-Disposition", "attachment;filename=\""
            + new String(annexName.getBytes("gb2312"), "ISO8859-1") + "\"");
        byte[] buffer = new byte[4096];
        BufferedOutputStream output = null;
        try
        {
            output = new BufferedOutputStream(response.getOutputStream());
            int n = -1;
            // 遍历,开始下载
            while ((n = input.read(buffer, 0, 4096)) > -1)
            {
                output.write(buffer, 0, n);
            }
            output.flush(); // 不可少
            response.flushBuffer();// 不可少
        }
        catch (Exception e)
        {
            // 异常自己捕捉

        }
        finally
        {
            // 关闭流,不可少
            if (input != null)
                input.close();
            if (output != null)
                output.close();
        }
    }

模拟下载的jsp如下:

<div style="text-align: center;">
    <a>附件id</a>
   <select id="annexId">
        <c:forEach items="${annexList }" var="an">
            <option value="${an.annexId }">${an.annexName }</option>
        </c:forEach>
   </select><br>
   <!-- <a>1-数据库下载,其他服务器下载</a>
   <select id="flag">
        <option value="1">数据库下载</option>
        <option value="0">服务器下载</option>
   </select> -->
   <input type='button' value="ajax下载"  onclick='down();'>
</div>
   <iframe id="fileDownFrame" src="" style="display:none; visibility:hidden;"></iframe> 

js代码如下:

function down(){
    $("#fileDownFrame").attr("src","${ctx}/file/download.action?annexId="+$("#annexId").val()+"&flag="+$("#flag").val());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值