2013-11-22 52 views
1

我在处理包含PDF的POST请求,并试图重新构建该文件并将其保存到我的服务器上。下面是我使用的代码,pdfString是请求主体:C#.net将POST请求中的内容写为PDF生成空白PDF

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被关闭。

有没有其他的方式来读取请求到我应该使用的内存或什么?

回答

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为多/表单数据。

+0

这件事情是它是多部分形式的数据,我不知道一种方法来隔离表示pdf的流的部分。 – Chronos

+0

非常酷,这看起来是我需要的。谢谢! – Chronos