2017-09-02 30 views
0

我试图理解http请求,当我使用请求主体上的post方法发送一串数据时,我们发送一个值作为如下:使用http通过multipart/form-data发送文件图像时的外部字符

--------------------------d74496d66958873e 
Content-Disposition: form-data; name="person" 

anonymous 
--------------------------d74496d66958873e 

但是如果我们使用POST方法发送一个文件时,它会是这样:

--------------------------d74496d66958873e 
Content-Disposition: form-data; name="fileToUpload"; filename="icon.png" 
Content-Type: image/png 

-O9†q#ë#ÞÿËà3l†v}uá#t(<‡c3f 
úS©59ñõCáa#Ž¡#Za%ð.ž zxý˜F#ZqÄð&^ 
jx[1…ÕЊËÂ$Æ‚#Þ 

--------------------------d74496d66958873e 

我的问题是:

  1. 当我们发送文件时,什么是外部字符包含在-------------------------- d74496d66958873e之间? 我的意思是

    -O9†,Q#ë#ÞÿËà3l†V} UA#吨(<‡C3F 美国©59ñõCáa#Ž¡#杂%ð.žzxý~F#ZqÄð&^ JX [1 ... ÕЊËÂ$ AE,#Þ

  2. 的字符是二进制,六,或Base64还是什么?

  3. 如何将图片文件更改为字符的时候,我们要手工编写的http请求使用的编程语言?

+0

尝试'多部分/形式data'代替 –

+0

是的,我所做的和发现的限制中一个奇怪的charakter,它是什么 –

+0

@Daniel Stenberg发明的,请帮我 –

回答

0

那些是纯二进制字节。文件icon.png由HTTP客户端发送时包含的所有字节。

的格式RFC 1867描述,基本上是这样的:

--[boundary] 
[headers] 

[N bytes] 
--[boundary] 
[headers] 

[M bytes] 
--[boundary]-- 

要提取的内容,你需要分析过去的边界,解析头(0,1或多个),然后读取二进制数据,直到达到结束边界。 (最后的边界在右侧有两个额外的破折号。)

...并且在单个多部分POST中可以有任何数量的这样的部分。

+0

坦克@Daniel Stenberg发明的,如何将文件转换图像格式二进制字节使用编程语言? –