C#.net将POST请求中的内容写为PDF生成空白PDF

时间:2013-11-22 01:35:32

标签: c# .net rest pdf post

我正在处理包含PDF的POST请求,并且我正在尝试重新构建文件并将其保存到我的服务器上。这是我正在使用的代码,pdfString来自请求正文:

string myPath = @"C:\mypath\mypdf.pdf";

byte[] byteArray = Encoding.UTF8.GetBytes(pdfString);

MemoryStream stream = new MemoryStream(byteArray);
using (var writeStream = File.OpenWrite(myPath)) 
{
     stream.CopyTo(writeStream);
     writeStream.Close();
}

这给了我一个与原始文件相比页面大小和页数正确的文件,但所有页面都是空白的。

如果这很有用,这里是请求正文的开头,其中存储了一些PDF的元数据:

Content-Disposition: form-data; name="file"

%PDF-1.3
%          
%100230[584]
1 0 obj 
<<
/Filter/Standard
/R 2 /V 1
/O<ad6a15e8126b8f8185e4db64f2a41b8bd94a79eed4f6fd1e6b17da57ea2d8ba9>
/U<e1f8eabd02255525f1eb0c68575189d08e577035a6905adeb50d84e67779a066>
/P 4
>> 
endobj
2 0 obj 
<<
/Producer(sZT\310]!\354w\244\214)
/Author(zS[\315D\002\332\005\252\263\b$\375f]\334)
/Title()
/Subject(\007\004\017\233\0260\203g\205\260\016/\375`J\324x"8v)
/Keywords()
/CreationDate(t\014\017\233\007T\222\024\330\346Qr\2539\037\210)
/ModDate(t\014\017\233\007T\222\024\330\346Qr\250=\033\214)
/Creator(Gfy\355\026\005\332\005\236\257"7\371lK\230[o\bZ)
>> 
endobj
3 0 obj 
<<
/Type/XObject/Subtype/Image
/Name/wpt1
/Width 640
/Height 480
/BitsPerComponent 8
/ColorSpace/DeviceRGB
/Length 23713
/Filter [/FlateDecode/DCTDecode] >>

之后没有什么是纯文本。直到PDF关闭。

还有其他方法可以将请求读入我应该使用的内存中吗?

1 个答案:

答案 0 :(得分:2)

我认为您不希望将其视为UTF8数据。您可能只想直接从请求中获取流。请参阅:http://msdn.microsoft.com/en-us/library/d4cek6cc(v=vs.110).aspx

using (var reqStream = req.GetRequestStream()) 
{    
  // reqStream.Write( ... ) // write the bytes of the file
  // or stream.CopyTo(writeStream);
}

检查Request.Files http://msdn.microsoft.com/en-us/library/system.web.httprequest.files(v=vs.110).aspx以获取multipart / form-data。