【问题标题】:Multipart message and POST parameters on server-side服务器端的多部分消息和 POST 参数
【发布时间】:2011-12-23 12:21:15
【问题描述】:

我正在尝试在多部分消息中发布文件。问题是我需要使用该文件传递两个额外的参数。我希望它们可以在 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

【问题讨论】:

    标签: http client-server multipart


    【解决方案1】:

    实际上,您想要做的正是多部分消息相对于$_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>
    

    现在假设我们用value1value2value3 填充三个文本输入,我们选择一个名为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: header 不包含filename="" 元素的部分被添加到$_POST 数组中,而那些带有一个的部分被视为文件上传并添加到$_FILES

    在构建multipart/form-data 消息以发送到服务器时,我发现构建您正在模仿请求的 HTML 表单并根据该 HTML 表单的行为方式构建您的 HTTP 消息是最容易的。

    【讨论】:

      猜你喜欢
      • 2017-12-22
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多