我正在处理包含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关闭。
还有其他方法可以将请求读入我应该使用的内存中吗?
答案 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。