手动创建文件上载的HTTP POST请求

时间:2011-12-09 07:43:06

标签: objective-c http file-upload

最终我要做的是手动制作正确的POST主体以从C程序发送请求(好吧,Objective-C)。

我首先检查用户提交附有文件的网络表单时发送的数据。我希望有人可以帮我解决一些我最初的困惑:

  1. 假设上传的文件是png文件。它是如何在客户端编码的? Web服务如何知道文件是如何编码的,以便它可以成功地将其转换回图像数据。我有一个UIImage,但我想弄清楚如何将它写入正文字符串,以便网络服务器知道该数据的含义。

  2. 以下是我正在研究的一些帖子数据。它代表了一些表单变量以及一个简单的png文件。我已经验证服务器确实收到了请求并将我的照片添加到其数据库中。我的问题是,为什么我看不到代表编码图像的实际数据?它似乎不在这个帖子的任何地方。

  3. 非常感谢你的帮助。

    Content-Disposition: form-data; name="user"
    
    someUser
    ------WebKitFormBoundaryDPIav9ZBBnDSAURS
    Content-Disposition: form-data; name="description"
    
    Description of a photo
    ------WebKitFormBoundaryDPIav9ZBBnDSAURS
    Content-Disposition: form-data; name="photo"; filename="simple.png"
    Content-Type: image/png
    
    
    ------WebKitFormBoundaryDPIav9ZBBnDSAURS
    Content-Disposition: form-data; name="commit"
    
    Create
    ------WebKitFormBoundaryDPIav9ZBBnDSAURS--
    

1 个答案:

答案 0 :(得分:2)

对于文件,它将假定由\r\n--boundry终止的文件的原始字节,但是您可以另外指定 Content-Length和Content-Encoding ,它可以是base64,gzip, base64-gzip和其他一些类型。

------WebKitFormBoundaryDPIav9ZBBnDSAURS
Content-Disposition: form-data; name="photo"; filename="simple.png"
Content-Type: image/png
Content-Length: 17829
Content-Encoding: base64

H4sIAAAAAAAAC+y9aZPj1pE2+p2/oq4mYmQHLGHfPHJPAAQJEDuJlRhPOLADJPad+LXvx9f3L9wv
F1XVkrqlakm2ZY9HVkdXFXHOQZ5Ensx8MnESxFf/uZTF0xR3fV5Xf/gM/hL67CmuwjrKq/QPn50M
7QuKwukv4M/+893uK/fIyU/b+Kr/w2fZMDS/B8F5nr/Uxy4+RGn8ZViX4PMYkHgm8zLw90Hjfzy6
C8vmi7QLv0zDL0P/62Hh2A91+SNk9y+Dvj4livs8reLu0ydx70ds/MBfn7UkUfETuH+3e3p6+iot
.....