我正在编写一个RESTful API。我在使用不同的动词上载图像时遇到麻烦。
考虑:
我有一个对象,可以通过对URL的发布/放置/删除/获取请求来创建/修改/删除/查看。如果有要上载的文件,则请求是多部分形式;如果只有文本要处理,则请求是application
/ xml。
为了处理与对象相关的图像上传,我正在做类似的事情:
if(isset($_FILES['userfile'])) {
$data = $this->image_model->upload_image();
if($data['error']){
$this->response(array('error' => $error['error']));
}
$xml_data = (array)simplexml_load_string( urldecode($_POST['xml']) );
$object = (array)$xml_data['object'];
} else {
$object = $this->body('object');
}
这里的主要问题是在尝试处理放置请求时,显然$ _POST不包含放置数据(据我所知!)。
供参考,这是我构建请求的方式:
curl -F userfile=@./image.png -F xml="<xml><object>stuff to edit</object></xml>"
http://example.com/object -X PUT
有谁知道如何xml
在我的PUT请求中访问变量?
首先,$_FILES
在处理PUT请求时不填充。它仅在处理POST请求时由PHP填充。
您需要手动解析它。这也适用于“常规”字段:
// Fetch content and determine boundary
$raw_data = file_get_contents('php://input');
$boundary = substr($raw_data, 0, strpos($raw_data, "\r\n"));
// Fetch each part
$parts = array_slice(explode($boundary, $raw_data), 1);
$data = array();
foreach ($parts as $part) {
// If this is the last part, break
if ($part == "--\r\n") break;
// Separate content from headers
$part = ltrim($part, "\r\n");
list($raw_headers, $body) = explode("\r\n\r\n", $part, 2);
// Parse the headers list
$raw_headers = explode("\r\n", $raw_headers);
$headers = array();
foreach ($raw_headers as $header) {
list($name, $value) = explode(':', $header);
$headers[strtolower($name)] = ltrim($value, ' ');
}
// Parse the Content-Disposition to get the field name, etc.
if (isset($headers['content-disposition'])) {
$filename = null;
preg_match(
'/^(.+); *name="([^"]+)"(; *filename="([^"]+)")?/',
$headers['content-disposition'],
$matches
);
list(, $type, $name) = $matches;
isset($matches[4]) and $filename = $matches[4];
// handle your fields here
switch ($name) {
// this is a file upload
case 'userfile':
file_put_contents($filename, $body);
break;
// default for all other files is to populate $data
default:
$data[$name] = substr($body, 0, strlen($body) - 2);
break;
}
}
}
在每次迭代时,$data
将使用您的参数填充数组,并$headers
使用每个部分的标头(例如:Content- Type
等)填充数组,并$filename
包含原始文件名(如果请求中提供了该文件名,并且适用于领域。
请注意,以上multipart
内容仅适用于内容类型。Content-Type
在使用上述内容解析正文之前,请务必检查请求标头。
问题内容: 我正在尝试通过带有POST请求的照片上传 根据自述文件,我应该能够做到这一点 问题是,这不起作用。我收到测试服务器的回复,说它转储了0个post变量。 我已经确认该HTML小页面服务器处于工作状态 所以问题是,请求模块在做什么?有没有更好的方法来发送节点? 问题答案: 经过更多研究后,我决定使用。这使得分段上传非常容易。
我正在尝试通过使用多部分数据主体的JMeter构建HTTP请求。 我有一个HTTP头管理器,其内容类型设置为多部分/表单数据;边界=AaB03x。我选择了“将多部分/表单数据用于POST”。 然后我创建了一个数据主体, 当我运行这个程序时,我发现请求没有正确地发送正文,而是发送了一些随机数据, 发布数据: 并给出错误响应, 我的第二个问题是:请求的第3部分发送一个要上载的文件。我可以通过某种方式传
我是Java(Spring Boot)新手,我正在尝试向s3发送一个
我在Lumen(应用程序A)中创建了一个简单的API,它: 接收PSR-7请求接口 替换对应用程序B的请求的URI 并通过古斯发送请求。 上面的代码将数据传递给应用程序B以获取查询参数、x-www-form-urlencoded或JSON内容类型。但是,它无法传递多部分/form-data。(该文件在应用程序A中可用:
我们正在使用Zuul将请求转发到内部微服务。内部服务有两个endpoint(一个PUTendpoint和一个POSTendpoint)。我们发现,多部分请求在到达内部PUTendpoint之前就已损坏。 多部分数据似乎已从请求中删除。这似乎只适用于PUT请求,因为POST工作得很好。 如果我们使用cURL直接命中内部PUTendpoint,那么请求将得到正确处理。相应的cURL命令和请求主体如下所
所以我有一个网站,我正在建设,它将使用数据库中的数据来填写不同网站上的表格。现在我明白了,这可以很容易地用cURL或python来完成,但是,当我截取和读取post数据时,通常会非常混乱。例如,在此表单中,只有注释和分级选项,但包含所有类型的其他垃圾: