我正在尝试在多部分邮件中发布文件。问题是我需要传递两个额外的参数与该文件。我希望它们可以在POST参数数组中访问。问题是是否可以将部分添加到多部分消息,以便它将被解释为POST参数?还是我在浪费时间?
我想要那样的:
--1BEF0A57BE110FD467A\r\n
Content-Disposition: form-data; name="name1"\r\n
\r\n
value\r\n
与$_POST['name1']
PS:据我所知,如果上传带有动作脚本FileReference.upload(urlRequest)
的文件并指定urlRequest
中的帖子参数,那么它们将会在$_POST
中
答案 0 :(得分:3)
您要做的事实上就是多部分消息与$_POST
数组相关的工作方式。
考虑以下HTML表单:
<form action="/somefile.php" method="post" enctype="multipart/form-data">
<input name="text1" type="text" />
<input name="text2" type="text" />
<input name="text3" type="text" />
<input name="file" type="file" />
<input type="submit" />
</form>
现在我们假设我们使用value1
,value2
和value3
填充三个文字输入,我们选择一个名为file.txt
的文件,然后按提交。这将导致请求看起来像这样:
POST /somefile.php HTTP/1.1
Host: somehost.com
Accept: */*
User-Agent: MyBrowser/1.0
Content-Type: multipart/form-data; boundary="this-is-a-boundary-string"
--this-is-a-boundary-string
Content-Dispostion: form-data; name="text1"
value1
--this-is-a-boundary-string
Content-Dispostion: form-data; name="text2"
value2
--this-is-a-boundary-string
Content-Dispostion: form-data; name="text3"
value3
--this-is-a-boundary-string
Content-Dispostion: form-data; name="file"; filename="file.txt"
Content-Type: text/plain
This is the contents of file.txt
--this-is-a-boundary-string--
当我们在PHP中查看它时,如果我们print_r($_POST);
我们应该得到这样的结果:
Array
(
[text1] => value1
[text2] => value2
[text3] => value3
)
...如果我们print_r($_FILES);
:
Array
(
[file] => Array
(
[name] => file.txt
[type] => text/plain
[size] => 32
[tmp_name] => /tmp/dskhfwe43232.tmp
[error] => 0
)
)
...所以你可以看到,Content-Disposition:
标题中不包含filename=""
元素的消息部分被添加到$_POST
数组中,而那些包含{作为文件上传处理并添加到$_FILES
。
在构建要发送到服务器的multipart/form-data
消息时,我发现构建您正在模仿请求的HTML表单最容易,并根据HTML表单的行为方式构建HTTP消息。 / p>