非表示のiframeを介したアップロードへのフォールバックを使用して、javascriptFileAPIとXmlHttpRequestを使用してファイルアップローダーを構築しています。両方のアップロードはPHPで処理されます。
ただし、$_FILES配列の構造に厄介な違いがあることがわかりました。
iframeフォールバックを使用する場合、配列は次のようになります。
$_FILES = array(
'files' => array(
'name' => array(
0 => 'name.jpg'
),
'type' => array(
0 => 'image/jpeg'
)
...
)
)
(私はfiles []と呼ばれる複数の入力を使用しています)
XmlHttpRequestを使用してアップロードすると、配列は次のようになります。
$_FILES = array(
'filename' => array(
'name' => 'name.jpg',
'type' => 'image/jpeg'
...
),
...
)
これを同じように動作させる方法はありますか?以下に、xhrリクエストを作成する方法を示します。
var data = new FormData(), xhr = new XMLHttpRequest();
data.append(file.name, file);
xhr.open('POST', 'process.php', true);
xhr.onload = function(e) {
...
};
xhr.send(data);
現時点では、このように2つの異なる配列を解析していますが、これは機能しているようです。
if(isset($_FILES['files']['name']))
{ // old skool $_FILES array
foreach($_FILES['files'] as $key => $values)
{
foreach($values as $index => $value)
{
$files[$index][$key] = $value;
}
}
}
else
{ // XMLHttpRequest $_FILES
$files = $_FILES;
}