如何在php中读取FormData文件?

时间:2016-04-22 04:41:37

标签: php jquery forms multipartform-data

我有一个ajax formdata

<form id="form" action="index.php?id=upload" method="post" enctype="multipart/form-data">

    <input id="files" multiple="true" name="files[]" type="file" />

</form>

我希望通过dataform继续发送此表单。

所以我创建了一个循环jn jquery来读取每个文件,所以每个文件我都有:

var data = new FormData();
        data.append(file.name, file);

        $.ajax({
            url: 'index.php?id=upload',
            type: 'POST',
            contentType: false,
            cache: false,
            processData:false,
            data: data,
            fileName:'files',
当我打印var_dumb($_FILES)时,在PHP代码中

我得到了这个结果:

  

姓名:&#34;数组(1){[&#34; 8_modem_pool_with_small_and_big_jpg&#34;] =&gt;   array(5){[&#34; name&#34;] =&gt; string(35)&#34; 8个调制解调器池   和big.jpg&#34; [&#34;类型&#34;] =&GT; string(10)&#34; image / jpeg&#34;   [&#34; tmp_name的值&#34;] =&GT; string(24)&#34; F:\ xampp \ tmp \ php268B.tmp \&#34;
  [&#34;错误&#34;] =&GT; int(0)[&#34; size&#34;] =&gt; INT(99790)   }}

如何在服务器端获得$_FILES值? 我试试

if(isset($_FILES["files"]))
        { 

if(isset($_FILES["file"]))
        {

但它们都不起作用。

------- EDIT -------------

感谢您的回答。但他们不是我的答案。

当我使用

时在php中

$_FILES["files"]

我发现了这个错误:

  

未定义的索引

但我可以通过以下代码打印值:

foreach($_FILES as $index => $file) {
 move_uploaded_file($file['tmp_name'],$target.$file['name']); 
}

我希望你和我不相信....

我想要这样的事情:

if(isset($_FILES["files"]))
{
   //do action for single file
   // do action for array file
}

最新代码适用于普通表单,但不适用于formdata。

3 个答案:

答案 0 :(得分:1)

您可以尝试使用for循环遍历此3级关联数组:

if(isset($_FILES['8_modem_pool_with_small_and_big_jpg'])){
    for($i=0;$i < count($_FILES['8_modem_pool_with_small_and_big_jpg']['name']);$i++){
        //Do whatever with the file:
        echo $_FILES['8_modem_pool_with_small_and_big_jpg']['name'][$i];
        echo $_FILES['8_modem_pool_with_small_and_big_jpg']['type'][$i];
        echo $_FILES['8_modem_pool_with_small_and_big_jpg']['tmp_name'][$i];
    }
}

答案 1 :(得分:0)

尝试以下方法:

move_uploaded_file( $_FILES['names']['8_modem_pool_with_small_and_big_jpg']['tmp_name'], $target);//target is the new file location and name

对于多个文件使用循环

foreach($_FILES['names'] as $index => $file) {
     $target = '/img/'.$file['name']
     move_uploaded_file( $file['tmp_name'], $target);
}

答案 2 :(得分:0)

这取决于您想要的值。所有这些都在数组中可见。

如果您想要名称,可以使用

$_FILES['names']['8_modem_pool_with_small_and_big_jpg']['tmp_name']

要将文件存储到特定位置,您可以使用

move_uploaded_file( $_FILES['names']['8_modem_pool_with_small_and_big_jpg']['tmp_name'], $myFile);