0

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

2 に答える 2

0

正しいタイプ「application/vnd.openxmlformats-officedocument.presentationml.presentation」ではなく、MIME タイプ「text/html」として送信しているためだと思います。

于 2014-08-19T23:36:40.443 に答える