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
私は近づいていると思います...正しい方向へのナッジは大歓迎です。