【问题标题】:How to get the Uploaded file name in php if the file is uploaded by using ajax jquery file upload如果使用ajax jquery文件上传上传文件,如何在php中获取上传的文件名
【发布时间】:2017-11-19 03:22:04
【问题描述】:

这是一个简单的文件上传脚本。我只需要我在 php 部分上传的文件的名称,因为我需要上传的文件 [连同它的路径] 将其插入数据库。 这是一个脚本。

index.html

<form enctype="multipart/form-data" id="form1">
    <input name="file" type="file" id="id1" />
    <input type="button" value="Upload" />
</form>
<progress></progress>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(':file').on('change', function() {
    var file = this.files[0];
    if (file.size > 10024000000) {
        alert('max upload size is 1k')
    }
    // Also see .name, .type
});
</script>
<script>
$(':button').on('click', function() {
$.ajax({
        // Your server script to process the upload
        url: 'upload.php',
        type: 'POST',
        // Form data
        data: new FormData($('form')[0]),
        // Tell jQuery not to process data or worry about content-type
        // You *must* include these options!
        cache: false,
        contentType: false,
        processData: false,

        // Custom XMLHttpRequest
        xhr: function() {
            var myXhr = $.ajaxSettings.xhr();
            if (myXhr.upload) {
                // For handling the progress of the upload
                myXhr.upload.addEventListener('progress', function(e) {
                    if (e.lengthComputable) {
                        $('progress').attr({
                            value: e.loaded,
                            max: e.total,
                        });
                    }
                } , false);
            }
            return myXhr;
        },
    });
});
</script>

上传.php

<?php
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$_FILES['file']['name']);
$name = $_FILES['file']['tmp_name'];
echo $name;//i tried this but i know as i uploaded file using ajax it will not work

 ?>

【问题讨论】:

  • 您的问题与您从 ajax 发送和接收数据的方式有关。您必须创建一个成功函数才能在 ajax 中接收数据。
  • 由于您使用 Jquery Ajax 上传文件,因此您不会在 $_FILES 变量中获取文件。该文件将在 $_POST 变量中发送一个二进制数据您应该使用 file_put_contents() 函数将内容写入文件。例如。 file_put_contents('img.jpg', $_POST['file']);
  • 我也尝试了下面提到的 php 代码。在那个代码中我正在打印 $_POST。它也不起作用。
  • 如果你在 $_POST 中没有得到任何东西,那么你的 Ajax 代码有问题。
  • 如果有任何错误,文件将不会上传。

标签: javascript php jquery ajax file-upload


【解决方案1】:

我觉得你可以在你的 php 代码中获取路径 这样做

$info = pathinfo($_FILES['userFile']['name']);
$ext = $info['extension']; // get the extension of the file
$newname = "newname.".rand(0,999).$ext;
$target = 'images/'.$newname;
move_uploaded_file( $_FILES['userFile']['tmp_name'], $target)

这里的$target包含了您可以存储在我们数据库中的文件路径。

【讨论】:

  • 非常感谢
  • @Manasa 很高兴听到我们的问题得到了解决。
【解决方案2】:

对于成功功能的实现,请使用此代码。

JS:

$(':button').on('click', function() {
$.ajax({
        // Your server script to process the upload
        url: 'upload.php',
        type: 'POST',
        // Form data
        data: new FormData($('form')[0]),
        // Tell jQuery not to process data or worry about content-type
        // You *must* include these options!
        cache: false,
        contentType: false,
        processData: false,

        // Custom XMLHttpRequest
        xhr: function() {
            var myXhr = $.ajaxSettings.xhr();
            if (myXhr.upload) {
                // For handling the progress of the upload
                myXhr.upload.addEventListener('progress', function(e) {
                    if (e.lengthComputable) {
                        $('progress').attr({
                            value: e.loaded,
                            max: e.total,
                        });
                    }
                } , false);
            }
            return myXhr;
        },
         success: function(data)
        {
         alert(data);//Note that sometimes ajax misinterprets the data that is returned. To not have this problem, declare the type of data you expect to receive.
        }
    });
    });

PHP:

move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$_FILES['file']['name']);
$name = $_FILES['file']['tmp_name'];
echo $name;

如果要回传多个值,请使用 Json 编码回传数据。

代码:

PHP:

move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$_FILES['file']['name']);
$name = $_FILES['file']['tmp_name'];
$path = 'uploads/'.$_FILES['file']['name'];
echo json_encode(array(
                'name'=> $name,
                'path'=> $path
));

JS:

 ...
  success: function(data){
    alert("Name: "+data.name);
    alert("Path: "+data.path);
  }

请注意,有时 ajax 会误解返回的数据。为避免出现此问题,请声明您希望接收的数据类型。

【讨论】:

  • 是的,写成功函数后我可以看到输出语句。我也得到了路径
  • 非常感谢
猜你喜欢
  • 2014-07-05
  • 2017-08-25
  • 2014-05-07
相关资源
最近更新 更多