downfile文件下载

/*
 * 文件名:DownLoadAction.java
 * 版权:Copyright 2016 Huawei Tech. Co. Ltd. All rights Reserved.
 * 描述:
 * 修改人:cWX340527
 * 修改时间:2016年3月4日
 * 修改内容:新增
 */
package com.huawei.srcms.securityreport.web;


import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;


import org.apache.struts2.ServletActionContext;


import sun.misc.BASE64Encoder;


import com.huawei.srcms.common.base.web.BaseAction;
import com.huawei.srcms.common.exception.SRCMSException;
import com.huawei.srcms.common.util.SRCMSUtils;
import com.huawei.srcms.securityreport.service.ISecurityReportService;


/**
 * 下载文件Action<描述>.
 * @author cWX340527
 * @version 1.0, 2016年3月4日
 */
public class DownLoadAction extends BaseAction
{
    private static final long serialVersionUID = 1L;


    private ISecurityReportService securityReportService;


    /**
     * 文件流
     */
    private InputStream inputStream;


    /**
     * 需要下载的文件名称
     */
    private String filename;//下载页面传递了该参数,需提供setter方法接收


    public void setFilename(String filename)
    {
        //转码并防御xss攻击转换
        try
        {
            this.filename = SRCMSUtils.xssfilter(new String(filename.getBytes("ISO-8859-1"), "utf-8").trim());
        }
        catch (UnsupportedEncodingException e)
        {
        LOG.error("setFilename is fail:"+e.toString());
        }
    }


    public String downloadFile() throws SRCMSException
    {
        try
        {
            this.inputStream = this.securityReportService.downloadfile(this.filename);
        }
        catch (FileNotFoundException e)
        {
            LOG.error("get " + this.filename + " exception.", e.getMessage());
            throw new SRCMSException("get " + this.filename + " exception.");
        }
        
        //返回一个文件输入流
        if (this.inputStream == null)
        {
            this.message = "下载文件【" + this.filename + "】失败。";
            return ERROR;
        }
        return SUCCESS;
    }


    //为客户端提供输入流
    public InputStream getInputStream()
    {
        return this.inputStream;
    }


    //根据不同的文件动态给出MIME文件类型
    public String getContentType()
    {
        //在Tomcat Conf里的web.xml有对应的映射文件
        return ServletActionContext.getServletContext().getMimeType(this.filename);
    }


    //返回一个文件名
    public String getFilename() throws IOException
    {
        String agent = ServletActionContext.getRequest().getHeader("user-agent");//根据http头信息获取对应的浏览器类型
        return encodeDownloadFilename(filename, agent);
    }


    //下载附件名乱码问题 , IE和火狐 解决不同   IE默认是Url编码 火狐默认是base64编码
    public String encodeDownloadFilename(String fileName, String agent) throws IOException
    {
        if (agent.contains("Firefox"))
        { // 火狐浏览器
            fileName = "=?UTF-8?B?" + new BASE64Encoder().encode(fileName.getBytes("utf-8")) + "?=";
        }
        else
        { // IE及其他浏览器
            fileName = URLEncoder.encode(fileName, "utf-8");
        }
        return fileName;
    }


    /**
     * @return the service
     */
    public ISecurityReportService getSecurityReportService()
    {
        return this.securityReportService;
    }


    /**
     * @param service the service to set
     */
    public void setSecurityReportService(ISecurityReportService service)
    {
        this.securityReportService = service;
    }


}
简单的网络下载文件程序。 WSADATA wdata; WSAStartup(MAKEWORD(2,2),&wdata); int sockfd; char buffer[1024]; struct sockaddr_in server_addr; struct hostent *host; int portnumber,nbytes; char host_addr[256]; char host_file[1024]; char local_file[256]; FILE * fp; char request[1024]; int isend, totalsend; int i; char * pt; memset(host_file,0,sizeof(host_file)); memcpy(host_file,"down/HB_EHSniffer36_ljh.rar",strlen("down/HB_EHSniffer36_ljh.rar")+1); if((host=gethostbyname("nmas.onlinedown.net"))==NULL)/*取得主机IP地址*/ { fprintf(stderr,"Gethostname error, %s\n", strerror(errno)); exit(1); } /* 客户程式开始建立 sockfd描述符 */ if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)/*建立SOCKET连接*/ { fprintf(stderr,"Socket Error:%s\a\n",strerror(errno)); exit(1); } /* 客户程式填充服务端的资料 */ memset(&server_addr,0,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(80); server_addr.sin_addr=*((struct in_addr *)host->h_addr); /* 客户程式发起连接请求 */ if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)/*连接网站*/ { fprintf(stderr,"Connect Error:%s\a\n",strerror(errno)); exit(1); } memset(request,0,1024); sprintf(request,"GET /%s HTTP/1.1\r\nAccept: */*\r\nCache-Control: no-cache\r\nConnection: close\r\nHost: %s\r\nPragma: no-cache\r\nReferer: http://www.onlinedown.net/soft/15450.htm\r\nRange: bytes=0-\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; )\r\n\r\n" ,host_file,"nmas.onlinedown.net"); printf("%s", request);/*准备request,将要发送给主机*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NEOU2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值