【问题标题】:upload a file using jquery post and php使用 jquery post 和 php 上传文件
【发布时间】:2021-08-28 21:25:22
【问题描述】:

尝试在不使用表单的情况下上传文件并使用$.post 传输文件
我想问题出在php方面,但我不确定

<input type='file' id='inpfile'>

$(inpfile).on('change', function(){
    var fd = new FormData();
    var file = $(inpfile)[0].files[0];
    fd.append('file', file);
    fd = JSON.stringify(fd);
    $.post('pro.php', {fn: 'upload', args: [fd]}, function(data){
        console.log(data);
    });
});

pro.php

if(isset($_POST['fn'], $_POST['args'])){
    $fn = $_POST['fn']; $args = $_POST['args'];
    $fn(...$args);
}

function upload($fd){
    $fd = json_decode($fd);
    $fname = $fd->file;
    $destination = 'upload/' . $fname;
    move_uploaded_file($fname, $destination);
}

【问题讨论】:

  • 你的代码是不安全的,从任意文件上传到任意函数执行,你需要保护fn: 'upload'免受fn: 'exec', args:['rm . -Rf']fn: 'mail', args:['spam@example.com', 'subject', 'message']等的影响

标签: javascript php jquery ajax upload


【解决方案1】:

你不能简单地用 $.post 方法上传文件,当更改为字符串时,表单数据不能发送文件。您需要添加 contentType:false and processData:false, 并删除此代码 fd = JSON.stringify(fd); 此外,您的 jquery 无法识别更改,因为您没有正确解决它。应该是$('#inpfile').on('change', function() 而不仅仅是$(inpfile).on('change', function()

你可以试试这个代码。

<input type='file' id='inpfile'>

$('#inpfile').on('change', function(){
        var fd = new FormData();
        var files = $('#inpfile')[0].files;
           fd.append('file',files[0]);
           $.ajax({
              url: 'pro.php',
              method: 'post',
              data: fd,
              contentType: false,
              processData: false,
              success: function(response){
            //your code.....
                 }
            
           });     
});

在 PHP 服务器端,您使用 files 方法而不是 post 方法检查它。那是

 if(isset($_FILES['file']['fd'])){
    your code.......
    }

【讨论】:

  • $(inpfile) 当然可以。另外 - 在 php 方面 - $_FILES['file']['name'] - 它可以工作。你确定不能使用$.post 吗?
  • 很高兴知道。 $.post 需要一个表单插件来上传文件,这是一个额外的开销。 $.post 以无法发送文件的序列化形式发送数据。如果解决了您的问题,请将帖子标记为已解决。
猜你喜欢
  • 2012-06-18
  • 1970-01-01
  • 2011-04-22
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
相关资源
最近更新 更多