首页 新闻 会员 周边

c#如何下载动态生成的附件

0
悬赏园豆:15 [待解决问题]

我想在c#代码中下载该附件
http://www.nbcs.gov.cn/module/download/downfile.jsp?classid=0&filename=44950b3deb254b6788cd3c7b0ff02a80.doc
发现这个附件是通过jsp动态生成的,请问C#代码如果编写

巴蒂尔的主页 巴蒂尔 | 初学一级 | 园豆:187
提问于:2018-11-30 08:51

var client = new HttpClient();
return await client.GetStreamAsync(uri); 这个是获得流,获得流就=获得文件了,读流完成就好啦。

Eysa 5年前
< >
分享
所有回答(4)
0

有很多生成word的开源类库可以用,收费的也有

会长 | 园豆:12401 (专家六级) | 2018-11-30 08:59

我是要通过c#代码下载到本地 不是提供下载

支持(0) 反对(0) 巴蒂尔 | 园豆:187 (初学一级) | 2018-11-30 09:02

@巴蒂尔: 不好意思,我眼有点瞎,看错了

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2018-11-30 09:38
0

代码如下,仅供参考

public static string HttpDownloadFile(string url, string path)
{
// 设置参数
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
//发送请求并获取相应回应数据
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
Stream responseStream = response.GetResponseStream();

//创建本地文件写入流
Stream stream = new FileStream(path, FileMode.Create);

byte[] bArr = new byte[1024];
int size = responseStream.Read(bArr, 0, (int)bArr.Length);
while (size > 0)
{
    stream.Write(bArr, 0, size);
    size = responseStream.Read(bArr, 0, (int)bArr.Length);
}
stream.Close();
responseStream.Close();
return path;

}

chester·chen | 园豆:507 (小虾三级) | 2018-11-30 09:38

试过了 不行额 报错:"远程服务器返回错误: (504) 网关超时。"

支持(0) 反对(0) 巴蒂尔 | 园豆:187 (初学一级) | 2018-11-30 09:51

@巴蒂尔:

   /// <summary>
   /// Http方式下载文件
   /// </summary>
   /// <param name="url">http地址</param>
   /// <param name="localfile">本地文件</param>
   /// <returns></returns>
    public bool Download(string url,string localfile)
    {
        bool flag = false;
        long startPosition = 0; // 上次下载的文件起始位置
        FileStream writeStream; // 写入本地文件流对象

        // 判断要下载的文件夹是否存在
        if (File.Exists(localfile))
        {

            writeStream = File.OpenWrite(localfile);             // 存在则打开要下载的文件
            startPosition = writeStream.Length;                  // 获取已经下载的长度
            writeStream.Seek(startPosition, SeekOrigin.Current); // 本地文件写入位置定位
        }
        else
        {
            writeStream = new FileStream(localfile, FileMode.Create);// 文件不保存创建一个文件
            startPosition = 0;
        }


        try
        {
            HttpWebRequest myRequest = (HttpWebRequest)HttpWebRequest.Create(url);// 打开网络连接

            if (startPosition > 0)
            {
                myRequest.AddRange((int)startPosition);// 设置Range值,与上面的writeStream.Seek用意相同,是为了定义远程文件读取位置
            }


            Stream readStream = myRequest.GetResponse().GetResponseStream();// 向服务器请求,获得服务器的回应数据流


            byte[] btArray = new byte[512];// 定义一个字节数据,用来向readStream读取内容和向writeStream写入内容
            int contentSize = readStream.Read(btArray, 0, btArray.Length);// 向远程文件读第一次

            while (contentSize > 0)// 如果读取长度大于零则继续读
            {
                writeStream.Write(btArray, 0, contentSize);// 写入本地文件
                contentSize = readStream.Read(btArray, 0, btArray.Length);// 继续向远程文件读取
            }

            //关闭流
            writeStream.Close();
            readStream.Close();

            flag = true;        //返回true下载成功
        }
        catch (Exception)
        {
            writeStream.Close();
            flag = false;       //返回false下载失败
        }

        return flag;
    }
}
支持(0) 反对(0) chester·chen | 园豆:507 (小虾三级) | 2018-11-30 10:04

@老六代码:

还是不行额,执行到136行报同样的错误

支持(0) 反对(0) 巴蒂尔 | 园豆:187 (初学一级) | 2018-11-30 10:12

@巴蒂尔: 那就不清楚了 百度C# url下载文件,查一下吧 这俩个对我们都在用没有问题的

支持(0) 反对(0) chester·chen | 园豆:507 (小虾三级) | 2018-11-30 10:14

@老六代码: 恩恩 谢谢你

支持(0) 反对(0) 巴蒂尔 | 园豆:187 (初学一级) | 2018-11-30 10:14
0

webclient

保镖 | 园豆:759 (小虾三级) | 2018-11-30 13:05

试过了 没用

支持(0) 反对(0) 巴蒂尔 | 园豆:187 (初学一级) | 2018-11-30 13:06

@巴蒂尔: 那就不知道了

支持(0) 反对(0) 保镖 | 园豆:759 (小虾三级) | 2018-11-30 13:10
0

HttpClient 啊。

Eysa | 园豆:62 (初学一级) | 2018-11-30 17:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册