5

たとえばhttp://test.com/mypdf.pdfでホストされている PDF があります。

StreamPDFを変換してから、これを使用してPDFに戻すにはどうすればよいですかStream

次のことを試しましたが、例外が発生しました(画像を参照):

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();
}

ここに画像の説明を入力

4

2 に答える 2

7

これはうまくいきます:

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 コピーが発生します。

于 2012-11-01T11:57:57.020 に答える
5

をご覧になることをお勧めしますWebClient.DownloadFile

URL とローカル ファイル名を指定すると、ファイルが直接ディスクに保存されます。1 つか 2 つのステップを節約できます。

WebClient.DownloadDataファイルをメモリ内に保存する方法を試すこともできますbyte[]

編集

ファイルを投稿する Web サービスのプロトコルを指定していません。最も単純な形式 (RESTful) は、ファイルをデータに別の URL に POST するだけです。これを行う方法は次のとおりです。

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 サービスの種類について詳しく説明していただければ、さらに詳しい情報を提供できると思います..

于 2012-11-01T12:00:24.973 に答える