C# PDF上传编码问题

C# PDF上传编码问题,c#,http,pdf,encoding,multipartform-data,C#,Http,Pdf,Encoding,Multipartform Data,我将直截了当地说:如何将PDF文件从C#后端上传到multipart/form data请求中的HTTP web服务中,而不会将内容损坏到文件无法读取的地步?web服务文档仅规定文本文件应为text/plain,图像文件应为二进制文件;PDF文件只被称为“也受支持”,没有提到它们应该采用什么格式或编码 我用于创建请求的代码: HttpWebRequest request; string boundary = "---------------------------" + DateTime.Now

我将直截了当地说:如何将PDF文件从C#后端上传到
multipart/form data
请求中的HTTP web服务中,而不会将内容损坏到文件无法读取的地步?web服务文档仅规定文本文件应为
text/plain
,图像文件应为二进制文件;PDF文件只被称为“也受支持”,没有提到它们应该采用什么格式或编码

我用于创建请求的代码:

HttpWebRequest request;
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
request.ContentType = "multipart/form-data; boundary=" + boundary;

using (StreamWriter sw = new StreamWriter(request.GetRequestStream())) {
    sw.WriteLine("--" + boundary);

    sw.WriteLine("Content-Disposition: form-data; name=\"files\"; filename=\"" + Path.GetFileName(filePath) + "\"");

    sw.WriteLine(filePath.EndsWith(".pdf") ? "Content-Type: application/pdf" : "Content-Type: text/plain");

    sw.WriteLine();
    if (filePath.EndsWith(".pdf")) {

        // write PDF content into the request stream
    }
    else sw.WriteLine(File.ReadAllText(filePath));
    sw.Write("--" + boundary);
    sw.Write("--");
    sw.Flush();
}
对于简单的文本文件,这段代码工作得很好。但是,我上传PDF文件时遇到问题

  • 使用
    file.ReadAllText
    Encoding.UTF8.GetString(file.ReadAllBytes)
    使用
    StreamWriter.WriteLine
    将文件写入请求正文会导致上载的文件无法读取,因为.NET已将所有非UTF-8字节替换为正方形UTF-7和ANSI的结果相同,但UTF-8的结果与原始文件的内容最接近
  • 使用
    BinaryWriter
    Stream将文件作为二进制数据写入请求正文。Write
    会导致web服务将其作为无效的POST数据彻底拒绝。
    内容传输编码:二进制
    (由文档指示为
    应用程序/http
    所需,因此我尝试了此操作)也会导致拒绝

有哪些可选选项可用?如何在不使用.NET以占位符字符悄悄替换无效字节的情况下对PDF进行编码?请注意,我无法控制web服务接受哪种内容;如果我这样做,我就已经转到base64了。

问题已解决,我的问题已解决。多部分表单头和二进制数据已被删除两者都正确,但顺序错误,因为在使用
stream.CopyTo()将二进制数据写入请求流之前,我没有
Flush()
StreamWriter


这个故事的寓意是:如果您在同一时间与多个编写者一起写入同一个
,在与下一个编写者进行任何操作之前,请始终使用
Flush()

您是否尝试过将
HttpClient
MultipartFormDataContent
一起使用?@DavidTansey Stream.CopyTo()也不起作用,web服务将其作为无效的POST数据拒绝。