0

StreamReader を使用して WebRequest 経由で C# から PHP (TCPF) のルーチンを呼び出しています。PDF ファイルはストリームとして返され、文字列 (obv) に格納されます。PHPでテストしたので、文字列に返されるデータが実際にはPDFファイルであることはわかっています。文字列をファイルに書き込んで、実際に C# で有効な PDF を取得するのに苦労しています。ファイルをエンコードしようとしている方法と関係があることは知っていますが、試したいくつかのことは「今日ではありません、パドレ」という結果になりました(つまり、機能しませんでした)

リクエストを実行するために使用しているクラスは次のとおりです (使用している/借りた/盗んだ例については、ユーザー「Paramiliar」に感謝します):

    public class httpPostData
    {
        WebRequest request;
        WebResponse response;

        public string senddata(string url, string postdata)
        {

            // create the request to the url passed in the paramaters
            request = (WebRequest)WebRequest.Create(url);


            // set the method to POST
            request.Method = "POST";

            // set the content type and the content length
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = postdata.Length;

            // convert the post data into a byte array
            byte[] byteData = Encoding.UTF8.GetBytes(postdata);

            // get the request stream and write the data to it
            Stream dataStream = request.GetRequestStream();
            dataStream.Write(byteData, 0, byteData.Length);
            dataStream.Close();

            // get the response
            response = request.GetResponse();
            dataStream = response.GetResponseStream();
            StreamReader reader = new StreamReader(dataStream);

            // read the response
            string serverresponse = reader.ReadToEnd();

            //Console.WriteLine(serverresponse);
            reader.Close();
            dataStream.Close();
            response.Close();

            return serverresponse;
        }
    } // end class httpPostData

...そしてそれへの私の呼びかけ

httpPostData myPost = new httpPostData();    
// postData defined (not shown)
string response = myPost.senddata("http://www.example.com/pdf.php", postData);

string response明確でない場合は、有効な .pdf ファイルに書き込んでいます。私はこれを試しました(ユーザーエイドリアンに感謝します):

static public void SaveStreamToFile(string fileFullPath, Stream stream)
    {
        if (stream.Length == 0) return;

        // Create a FileStream object to write a stream to a file
        using (FileStream fileStream = System.IO.File.Create(fileFullPath, (int)stream.Length))
        {
            // Fill the bytes[] array with the stream data
            byte[] bytesInStream = new byte[stream.Length];
            stream.Read(bytesInStream, 0, (int)bytesInStream.Length);

            // Use FileStream object to write to the specified file
            fileStream.Write(bytesInStream, 0, bytesInStream.Length);
        }
    }

..and the call to it:

    string location = "C:\\myLocation\\";

    SaveStreamToFile(location, response);  // <<-- this throws an error b/c 'response' is a string, not a stream. New to C# and having some basic issues with things like this

私は近づいていると思います...正しい方向へのナッジは大歓迎です。

4

1 に答える 1

0

WebClientを使用できます。メソッドDownloadFile、または非同期のものを使用します。

楽しむ!フェルナンド.-


申し訳ありませんが、私はまだあなたのコメントを読んでいません。私はあなたがすでにこれをやっていると思います...

しかし、これはあなたを助けるかもしれません(URLとパスを置き換えるだけです)(http://msdn.microsoft.com/en-us/library/ez801hhe.aspxから)

string remoteUri = "http://www.contoso.com/library/homepage/images/";
string fileName = "ms-banner.gif", myStringWebResource = null;

// Create a new WebClient instance.
WebClient myWebClient = new WebClient();

// Concatenate the domain with the Web resource filename.
myStringWebResource = remoteUri + fileName;

Console.WriteLine("Downloading File \"{0}\" from \"{1}\" .......\n\n", fileName, myStringWebResource);

// Download the Web resource and save it into the current filesystem folder.
myWebClient.DownloadFile(myStringWebResource,fileName);     

Console.WriteLine("Successfully Downloaded File \"{0}\" from \"{1}\"", fileName, myStringWebResource);

Console.WriteLine("\nDownloaded file saved in the following file system folder:\n\t" + Application.StartupPath);
于 2013-04-18T13:19:28.660 に答える