[英]convert pdf to stream from url
我有一個PDF,主題是http://test.com/mypdf.pdf 。
如何將PDF轉換為Stream
,然后使用此Stream
將其轉換回PDF。
我嘗試了以下但有例外(見圖):
private static Stream ConvertToStream(string fileUrl)
{
HttpWebResponse aResponse = null;
try
{
HttpWebRequest aRequest = (HttpWebRequest)WebRequest.Create(fileUrl);
aResponse = (HttpWebResponse)aRequest.GetResponse();
}
catch (Exception ex)
{
}
return aResponse.GetResponseStream();
}
這將有效:
private static Stream ConvertToStream(string fileUrl)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
try {
MemoryStream mem = new MemoryStream();
Stream stream = response.GetResponseStream();
stream.CopyTo(mem,4096);
return mem;
} finally {
response.Close();
}
}
但是,您對返回的內存流的生命周期負全部責任。
更好的方法是:
private static void ConvertToStream(string fileUrl, Stream stream)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
try {
Stream response_stream = response.GetResponseStream();
response_stream.CopyTo(stream,4096);
} finally {
response.Close();
}
}
然后你可以這樣做:
using (MemoryStream mem = new MemoryStream()) {
ConvertToStream('http://www.example.com/',mem);
mem.Seek(0,SeekOrigin.Begin);
... Do something else ...
}
您也可以直接返回響應流,但是您必須檢查其生命周期,釋放響應可能會釋放流,因此mem copy。
您可能需要查看WebClient.DownloadFile
。
您給它一個URL和本地文件名,它將文件直接保存到磁盤。 可能會為您節省一兩步。
您也可以嘗試使用WebClient.DownloadData
將文件保存到內存中的byte[]
。
編輯
您沒有指定要將文件發布到的Web服務的協議。 最簡單的形式(RESTful)只是將文件POST到另一個URL的數據。 這是你如何做到這一點。
using (WebClient wc = new WebClient())
{
// copy data to byte[]
byte[] data = wc.DownloadData("http://somesite.com/your.pdf");
// POST data to another URL
wc.Headers.Add("Content-Type","application/pdf");
wc.UploadData("http://anothersite.com/your.pdf", data);
}
如果您使用的是SOAP,則必須將文件轉換為Base64字符串,但希望您使用的是生成的客戶端,它會為您處理。 如果您可以詳細說明您要將文件發送到的Web服務類型,我可能會提供更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.