簡體   English   中英

將pdf轉換為來自url的流

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM