.pptx ファイルをアップロードしてサーバーのディスクに保存するために、以下を実行しています。
ファイルを開こうとすると、ファイルが壊れていると表示され、開くことができません。
これは私のエンコーディングタイプまたは何か違うためですか?
任意のファイルを POST でバイナリとして送信し、サーバーに一度に到達させることは可能ですか?
public static void ListenerCallback(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
StreamReader reader = new StreamReader(request.InputStream);
var res = reader.ReadToEnd();
reader.Close();
toLog.Add(res);
NameValueCollection coll = HttpUtility.ParseQueryString(res);
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(res);
File.WriteAllBytes("output.pptx", bytes);
response.StatusCode = 200;
response.ContentType = "text/html";
using (StreamWriter writer = new StreamWriter(context.Response.OutputStream, Encoding.UTF8))
writer.WriteLine("File Uploaded");
response.Close();
}
これは、私が送信するものの Postman プレビューです。
POST HTTP/1.1
Host: localhost:80
Content-Type: application/vnd.openxmlformats-officedocument.presentationml.presentation
Cache-Control: no-cache
Postman-Token: 9a04aa33-cd44-d238-6873-b330524f4ae5
undefined
ソース (破損していない) ファイルを np++ で開くと、エディターが ANSI でエンコードすることを選択していることがわかります。
現在、UTF8 でエンコードしていますが、ANSI でエンコードするオプションがないようです。
また、ファイル サイズを比較すると、1 キロバイトのデータが失われます。
編集:私の現在のコードはこれです
これにより、空のファイルがディスクに書き込まれます。
public static void ListenerCallback(IAsyncResult result)
{
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
StreamReader reader = new StreamReader(request.InputStream);
var res = reader.ReadToEnd();
reader.Close();
Console.WriteLine(res);
NameValueCollection coll = HttpUtility.ParseQueryString(res);
using (var outp = File.OpenWrite("output.pptx"))
{
request.InputStream.CopyTo(outp);
}
response.StatusCode = 200;
response.ContentType = "text/html";
using (StreamWriter writer = new StreamWriter(context.Response.OutputStream, Encoding.UTF7))
writer.WriteLine("File Uploaded");
response.Close();
}