{"type":"rich","version":"1.0","provider_name":"phorkie","provider_url":"https:\/\/p.cweiske.de\/","title":"HTTP PUT with multipart\/form-data file upload","author_name":"Christian Weiske","cache_age":86400,"width":900,"height":900,"html":"<!-- embedding all files of https:\/\/p.cweiske.de\/381 -->\n<link rel=\"stylesheet\" href=\"https:\/\/p.cweiske.de\/css\/embed.css\"\/>\n<div class=\"phork\" id=\"381\">\n    <div class=\"phork-file\">\n <div class=\"phork-content\">\n  \n<div class=\"document\">\n\n\n<p>PUT f\u00fcr Updates in Zusammenspiel mit Dateiuploads (curl -XPUT -F <a class=\"reference external\" href=\"mailto:file=&#64;path\/to\/file.png\">file=&#64;path\/to\/file.png<\/a>, typ multipart\/form-data) funktioniert nicht.<\/p>\n<p>Bei POST parsed PHP den multipart\/form-data-Body selbst, bei PUT macht es das nicht.<\/p>\n<p>Keywords:<\/p>\n<ul class=\"simple\">\n<li>symfony http request format PUT upload<\/li>\n<li>symfony http foundation request format<\/li>\n<li>laravel dingo PUT file upload<\/li>\n<\/ul>\n<p>related:<\/p>\n<ul class=\"simple\">\n<li><a class=\"reference external\" href=\"http:\/\/laravel.io\/forum\/02-13-2014-i-can-not-get-inputs-from-a-putpatch-request\/\">http:\/\/laravel.io\/forum\/02-13-2014-i-can-not-get-inputs-from-a-putpatch-request\/<\/a><\/li>\n<li><a class=\"reference external\" href=\"http:\/\/php.net\/manual\/en\/features.file-upload.put-method.php\">http:\/\/php.net\/manual\/en\/features.file-upload.put-method.php<\/a><\/li>\n<\/ul>\n<\/div>\n\n <\/div>\n <div class=\"phork-meta\">\n  <a href=\"https:\/\/p.cweiske.de\/381\/rev-raw\/0685c00e8b57e259ea2374122d1f589e18d329cc\/README.rst\" style=\"float: right\">view raw source<\/a>\n  <a href=\"https:\/\/p.cweiske.de\/381#README.rst\">README.rst<\/a>\n <\/div>\n<\/div>\n    <div class=\"phork-file\">\n <div class=\"phork-content\">\n  <style type=\"text\/css\">\/**\n * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann\n * (http:\/\/qbnz.com\/highlighter\/ and http:\/\/geshi.org\/)\n *\/\n.php .de1, .php .de2 {font: normal normal 1em\/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}\n.php  {font-family:monospace;}\n.php .imp {font-weight: bold; color: red;}\n.php li, .php .li1 {color: #DDD;}\n.php .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}\n.php .kw1 {color: #b1b100;}\n.php .kw2 {color: #000000; font-weight: bold;}\n.php .kw3 {color: #990000;}\n.php .kw4 {color: #009900; font-weight: bold;}\n.php .co1 {color: #666666; font-style: italic;}\n.php .co2 {color: #666666; font-style: italic;}\n.php .co3 {color: #0000cc; font-style: italic;}\n.php .co4 {color: #009933; font-style: italic;}\n.php .coMULTI {color: #666666; font-style: italic;}\n.php .es0 {color: #000099; font-weight: bold;}\n.php .es1 {color: #000099; font-weight: bold;}\n.php .es2 {color: #660099; font-weight: bold;}\n.php .es3 {color: #660099; font-weight: bold;}\n.php .es4 {color: #006699; font-weight: bold;}\n.php .es5 {color: #006699; font-weight: bold; font-style: italic;}\n.php .es6 {color: #009933; font-weight: bold;}\n.php .es_h {color: #000099; font-weight: bold;}\n.php .br0 {color: #009900;}\n.php .sy0 {color: #339933;}\n.php .sy1 {color: #000000; font-weight: bold;}\n.php .st0 {color: #0000ff;}\n.php .st_h {color: #0000ff;}\n.php .nu0 {color: #cc66cc;}\n.php .nu8 {color: #208080;}\n.php .nu12 {color: #208080;}\n.php .nu19 {color:#800080;}\n.php .me1 {color: #004000;}\n.php .me2 {color: #004000;}\n.php .re0 {color: #000088;}\n.php span.xtra { display:block; }\n<\/style><div class=\"code\"><table class=\"php\"><tbody><tr class=\"li1\"><td class=\"ln\"><pre class=\"de1\">1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n<\/pre><\/td><td class=\"de1\"><pre class=\"de1\"><span class=\"kw2\">&lt;?php<\/span>\n<span class=\"kw2\">class<\/span> SomeDingoController <span class=\"kw2\">extends<\/span> \\Illuminate\\Routing\\Controller\n<span class=\"br0\">&#123;<\/span>\n&#160; &#160; <span class=\"kw2\">public<\/span> <span class=\"kw2\">function<\/span> update<span class=\"br0\">&#40;<\/span>\\Illuminate\\Http\\Request <span class=\"re0\">$request<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$id<\/span><span class=\"br0\">&#41;<\/span>\n&#160; &#160; <span class=\"br0\">&#123;<\/span>\n&#160; &#160; &#160; &#160; <span class=\"re0\">$medium<\/span> <span class=\"sy0\">=<\/span> Medium<span class=\"sy0\">::<\/span><span class=\"me2\">findOrFail<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$id<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&#160;\n&#160; &#160; &#160; &#160; <span class=\"co1\">\/\/no, we cannot use $request-&gt;getContentType()<\/span>\n&#160; &#160; &#160; &#160; <span class=\"co1\">\/\/ because it tries to map to a format<\/span>\n&#160; &#160; &#160; &#160; <span class=\"re0\">$type<\/span> <span class=\"sy0\">=<\/span> <span class=\"re0\">$request<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">headers<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">get<\/span><span class=\"br0\">&#40;<\/span><span class=\"st_h\">'CONTENT_TYPE'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&#160; &#160; &#160; &#160; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/substr\"><span class=\"kw3\">substr<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$type<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy0\">,<\/span> <span class=\"nu0\">6<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">==<\/span> <span class=\"st_h\">'image\/'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span>\n&#160; &#160; &#160; &#160; &#160; &#160; <span class=\"co1\">\/\/manually handle PUT file updates<\/span>\n&#160; &#160; &#160; &#160; &#160; &#160; <span class=\"re0\">$path<\/span> <span class=\"sy0\">=<\/span> <a href=\"http:\/\/www.php.net\/tempnam\"><span class=\"kw3\">tempnam<\/span><\/a><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.php.net\/sys_get_temp_dir\"><span class=\"kw3\">sys_get_temp_dir<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'put-fileupload-'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&#160; &#160; &#160; &#160; &#160; &#160; <a href=\"http:\/\/www.php.net\/file_put_contents\"><span class=\"kw3\">file_put_contents<\/span><\/a><span class=\"br0\">&#40;<\/span><span class=\"re0\">$path<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$request<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">getContent<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&#160; &#160; &#160; &#160; &#160; &#160; <span class=\"re0\">$medium<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">file<\/span> <span class=\"sy0\">=<\/span> <span class=\"kw2\">new<\/span> \\Illuminate\\Http\\UploadedFile<span class=\"br0\">&#40;<\/span>\n&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; <span class=\"re0\">$path<\/span><span class=\"sy0\">,<\/span> <span class=\"st_h\">'dummy'<\/span><span class=\"sy0\">,<\/span> <span class=\"re0\">$type<\/span>\n&#160; &#160; &#160; &#160; &#160; &#160; <span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&#160;\n&#160; &#160; &#160; &#160; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span>\n&#160; &#160; &#160; &#160; &#160; &#160; <span class=\"re0\">$this<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">validate<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy0\">...<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&#160; &#160; &#160; &#160; &#160; &#160; <span class=\"re0\">$medium<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">fill<\/span><span class=\"br0\">&#40;<\/span><span class=\"re0\">$request<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">all<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&#160; &#160; &#160; &#160; <span class=\"br0\">&#125;<\/span>\n&#160;\n&#160; &#160; &#160; &#160; <span class=\"re0\">$medium<\/span><span class=\"sy0\">-&gt;<\/span><span class=\"me1\">save<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span>\n&#160; &#160; &#160; &#160; <span class=\"kw1\">return<\/span> <span class=\"re0\">$medium<\/span><span class=\"sy0\">;<\/span>\n&#160; &#160; <span class=\"br0\">&#125;<\/span>\n<span class=\"sy1\">?&gt;<\/span>\n&#160;<\/pre><\/td><\/tr><\/tbody><\/table><\/div>\n <\/div>\n <div class=\"phork-meta\">\n  <a href=\"https:\/\/p.cweiske.de\/381\/rev-raw\/0685c00e8b57e259ea2374122d1f589e18d329cc\/SomeDingoController.php\" style=\"float: right\">view raw source<\/a>\n  <a href=\"https:\/\/p.cweiske.de\/381#SomeDingoController.php\">SomeDingoController.php<\/a>\n <\/div>\n<\/div>\n<\/div>\n"}
