如何使用 input type=file 上传 json 文件

我想在一个名为 process.php 的 php 脚本上发送一个 JSON 文件,将该文件保存在一个文件夹中,然后将该文件发送到一个 python 脚本。目前的html代码是这样的:


<form method="post" enctype="multipart/form-data">

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

    <input type="submit" value="Upload File" name="submit">

</form>

javascript代码是这样的:


 const url = 'process.php';

 const form = document.querySelector('form');


 form.addEventListener('submit', e => {

      e.preventDefault();

      const files = document.querySelector('[type=file]').files;

      const formData = new FormData();


      for (let i = 0; i < files.length; i++) {

          let file = files[i];

          formData.append('files[]', file);

       }


      fetch(url, {

          method: 'POST',

          body: formData

      }).then(response => {

           console.log(response);

     });

 });

最后我的PHP是这样的:


if ($_SERVER['REQUEST_METHOD'] === 'POST') {

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

    $errors = [];

    $path = 'uploads/';

    $extensions = ['json'];


    $all_files = count($_FILES['files']['tmp_name']);


    for ($i = 0; $i < $all_files; $i++) {

        $file_name = $_FILES['files']['name'][$i];

        $file_tmp = $_FILES['files']['tmp_name'][$i];

        $file_type = $_FILES['files']['type'][$i];

        $file_size = $_FILES['files']['size'][$i];

        $file_ext = strtolower(end(explode('.', $_FILES['files']['name'][$i])));


        $file = $path . $file_name;


        if (!in_array($file_ext, $extensions)) {

            $errors[] = 'Extension not allowed: ' . $file_name . ' ' . $file_type;

        }


        if ($file_size > 2097152) {

            $errors[] = 'File size exceeds limit: ' . $file_name . ' ' . $file_type;

        }


        if (empty($errors)) {

            move_uploaded_file($file_tmp, $file);

        }


    }


    if ($errors) print_r($errors);

}

}


在 PHP 中,如果我尝试打印 $file_name,文件名会正确打印,但如果我尝试打印其他信息,则结果是空字符串,或者在 $file_size 为 0 的情况下。那么,出了什么问题? 我是否必须在 apache 配置中设置一些内容才能在我的 Web 服务器上上传文件,或者我在代码中犯了一些错误?


RISEBY
浏览 462回答 2
2回答

婷婷同学_

您需要使用文件的临时名称,函数 is_uploaded_file() 不接受客户端机器上发送的文件名,试试这个:&nbsp;if (is_uploaded_file ($_FILES['upload_cont_file']['tmp_name'] ))&nbsp; &nbsp; echo 'file uploaded ';&nbsp;else&nbsp;echo 'error';

心有法竹

如果要上传并移动到特定目录,例如图像文件夹if (move_uploaded_file ( $_FILE['upload_cont_file']['tmp_name'] ,'images/'.$_FILE['upload_cont_file']['name'])){&nbsp; &nbsp; echo 'file uploaded ';}else{&nbsp; echo 'couldnt file uploaded';}如果您只是检查上传到临时文件夹的文件&nbsp;if (is_uploaded_file ($_FILES['upload_cont_file']['tmp_name'] )){&nbsp; &nbsp; echo 'file uploaded ';}else{&nbsp;echo 'file couldn't upload';}
打开App,查看更多内容
随时随地看视频慕课网APP