2010-09-25 87 views
2

我使用ActionScript引擎上传文件时,发动机将选择文件并通过网络直通HTTP POST命令发送的文件,该文件说,POST消息是这样的:如何解析HTTP POST(文件上传)流?

POST /handler.cfm HTTP/1.1 
    Accept: text/* 
    Content-Type: multipart/form-data; 
    boundary=----------Ij5ae0ae0KM7GI3KM7ei4cH2ei4gL6 
    User-Agent: Shockwave Flash 
    Host: www.example.com 
    Content-Length: 421 
    Connection: Keep-Alive 
    Cache-Control: no-cache 

    ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
    Content-Disposition: form-data; name="Filename" 

    MyFile.jpg 
    ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
    Content-Disposition: form-data; name="photo"; filename="MyFile.jpg" 
    Content-Type: application/octet-stream 

    FileDataHere 
    ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7 
    Content-Disposition: form-data; name="Upload" 

    Submit Query 

    ------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7-- 

在服务器端我有一个C++程序侦听端口80并解析POST消息。我只想要文件名和文件数据。如何使用C++解码文件数据,它是base64编码的,有没有一个库可以为我做?我想解码二进制文件,并将其写入文件,谢谢!

+0

如果你没有提供HTML的提交按钮的名称,它不会被发送到服务器(“上传”部分:) :) – pmg 2010-09-25 15:25:14

回答

5

不,没有编码。多部分消息的每个子部分的主体都包含在逐字节字节中。因此,您必须小心选择文件数据中不存在的boundary字符串。

要解析的multipart/form-data的形式提交你会够MIME解析器解析头,挑出你想要一个像boundaryname参数,并通过边界字符串分割收到的消息。这不是微不足道的,所以你可能想要consider existing libraries。 (不幸的是,浏览器在HTTP中实际执行的操作与RFC 1341中列出的标准MIME规则有所不同,特别是,字段名和文件名参数往往包含非ASCII字符和未转义的引号,但如果您生成。张贴自己希望你可以避开争夺这些地区的)

1

在没有“Content_Transfer_Encoding”头的,假定数据被编码在“7位”(RFC 1521; RFC 1867; RFC 2616)。

我不知道如果tere的C库解析/解码HTTP POSTs。我很肯定,虽然有:)

+0

哦,老兄,我真的来到这里看不到C++,但特别是C库解析边界数据,我也很确定有一些。 – 2016-09-22 08:03:56