繁体   English   中英

如何使用C#从HTML网页提交的POST表单中下载PDF?

[英]How do I download a PDF from an HTML webpage-submitted POST form using C#?

我正在尝试使用C#Windows窗体应用程序以编程方式下载一些PDF文档。 现在,我已经为下载PDF的每个页面提供了唯一的URL。

每个链接都是一个网页,页面加载后立即通过POST提交表单

function window_onload() {
                Form1.submit();
            }

然后,PDF开始下载。 我想停止下载PDF并将其自动保存到本地计算机。 我要这样做的原因是因为我每周需要下载大约15-20个PDF。

我将使用httpwebrequest对象。

根据pdf的大小以及服务器的响应时间,您可以异步或同步执行此操作。 这是使用GetResponse()方法的同步风格。

void DoPDFDownload(string strMyUrl, string strPostData, string saveLocation)
{
    //create the request
    var wr = (HttpWebRequest)WebRequest.Create(myURL);
    wr.Method = "POST";
    wr.ContentLength = strPostData.Length;
    //Identify content type... strPostData should be url encoded per this next    
    //declaration
    wr.ContentType = "application/x-www-form-urlencoded";
    //just for good measure, set cookies if necessary for session management, etc.
    wr.CookieContainer = new CookieContainer();

    using(var sw = new StreamWriter(wr.GetRequestStream()))
    {
        sw.Write(strPostData);
    }

    var resp = wr.GetResponse();

    //feeling rather lazy at this point, but if you need further code for writing
    //response stream to a file stream, I can provide.
    //...

}

下面是一个可以复制/粘贴到LINQPad中的小方法,以了解这些类的工作原理。

void DoSpeedTestDownloadFromFCC()
{

string strMyUrl = "http://data.fcc.gov/api/speedtest/find?latitude=38.0&longitude=-77.5&format=json";
    //create the request
    var wr = (HttpWebRequest)WebRequest.Create(strMyUrl);
    wr.ContentLength = strPostData.Length;
            //Note that I changed the method for the webservice's standard.
            //No Content type on GET requests.
    wr.Method = "GET";
    //just for good measure, set cookies if necessary for session management, etc.
    wr.CookieContainer = new CookieContainer();


    var resp = wr.GetResponse();

    //...
    using(StreamReader sr = new StreamReader(resp.GetResponseStream()))
    {
                    //here you would write the file to disk using your preferred method
                    //in linq pad, this just outputs the text to the console.
        sr.ReadToEnd().Dump();
    }

}
Response.ClearContent();    
Response.ClearHeaders();    
Response.ContentType = "application/octet-stream";                            
Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\";");    
Response.OutputStream.Write(data, 0, data.Length);    
Response.End();    

它将使用给定filename名将文件下载到本地磁盘。

 class DownloadLibrary
 {
 public static string getContentType(string Fileext)
 {
string contenttype = "";
switch (Fileext)
{
case ".xls":
contenttype = "application/vnd.ms-excel";
break;
case ".doc":
contenttype = "application/msword";
break;
case ".ppt":
contenttype = "application/vnd.ms-powerpoint";
break;
case ".pdf":
contenttype = "application/pdf";
break;
case ".jpg":
case ".jpeg":
contenttype = "image/jpeg";
break;
case ".gif":
contenttype = "image/gif";
break;
case ".ico":
contenttype = "image/vnd.microsoft.icon";
break;
case ".zip":
contenttype = "application/zip";
break;
default: contenttype = "";
break;
}
return contenttype;
}

public static void downloadFile(System.Web.UI.Page pg, string filepath)
{
pg.Response.AppendHeader("content-disposition", "attachment; filename=" + new FileInfo(filepath).Name);
pg.Response.ContentType = clsGeneral.getContentType(new FileInfo(filepath).Extension);
pg.Response.WriteFile(filepath);
pg.Response.End();
}
}

参考: http : //dotnetacademy.blogspot.com/2010/07/code-to-download-file-on-buttton-click.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM