【问题标题】:PHP and AJAX file upload: $_FILES array emptyPHP 和 AJAX 文件上传:$_FILES 数组为空
【发布时间】:2015-02-04 22:26:34
【问题描述】:

我正在尝试构建一个允许在 PHP 中上传文件的应用程序。上传文件时,应将下载链接附加到特定的 div。我正在使用 ajax 调用来运行 php 脚本,这样我就可以回显文件下载链接而不会卡在 php 页面上。 (我希望这是有道理的。)

这里是html:

<form action="php/upload.php" method="POST" enctype="multipart/form-data" id="uploadform">
                Select file to upload:
                <input type="file" name="fileToUpload" id="file">
                <input id="create" type="submit" value="Upload File">
</form>

这是进行 ajax 调用的外部 javascript/jquery:

$(function () {
  $('form').on('submit', function (e) {
          //prevents reloading of page
          e.preventDefault();
          //get file data
          var file_data = $("#file").prop("files")[0];
          var form_data = new FormData();
          form_data.append('file', file_data);
          //run upload.php script and append result to draggable block
          $.ajax({
            type: 'post',
            url: 'php/upload.php',
            cache: false,
            data: form_data,
            success: function (data) {
              $( "#draggable"+i).append(data);
              i++;
            }
          });

        });
});

这是应该上传文件的外部 php 脚本:

<?php

    $target_path = "../uploads/";
    $target_path = $target_path . basename( $_FILES[ 'fileToUpload' ][ 'name' ] );

    if ( move_uploaded_file( $_FILES[ 'fileToUpload' ][ 'tmp_name' ] , $target_path ) ){
        //echo '<a href=' . $target_path . ' download>Download</a>';
    } 
    else {
        echo $target_path;
        //var_dump($_FILES);
    }

我收到以下错误:Uncaught TypeError: Illegal invocation

问题来自试图在 ajax 调用中传递“form_data”。我正在尝试这样做,因为一旦运行 php 脚本,$_FILES 数组就会变为空。我需要一种方法来确保我上传的文件存储在该数组中。

【问题讨论】:

标签: php ajax file-upload


【解决方案1】:

自己解决了。需要在 ajax 调用中添加一些内容:

$.ajax({
            type: 'post',
            url: 'php/upload.php',
            cache: false,
           ** contentType: false, **
           ** processData: false, **
            data: new FormData(this),
            success: function (data) {
              $( "#draggable"+i).append(data);
              i++;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    • 2019-11-14
    • 2011-12-12
    • 2016-10-15
    • 1970-01-01
    相关资源
    最近更新 更多