Javascript 如果使用ajax jquery file upload上传文件,如何在php中获取上传的文件名

Javascript 如果使用ajax jquery file upload上传文件,如何在php中获取上传的文件名,javascript,php,jquery,ajax,file-upload,Javascript,Php,Jquery,Ajax,File Upload,这是一个简单的文件上传脚本。我只需要在php部分中上传的文件名,因为我需要上传的文件[及其路径],以便将其插入数据库。 这里有一个脚本 index.html <form enctype="multipart/form-data" id="form1"> <input name="file" type="file" id="id1" /> <input type="button" value="Upload" /> </form> &

这是一个简单的文件上传脚本。我只需要在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>

$(':file')。在('change',function()上{
var file=this.files[0];
如果(file.size>1002400000){
警报('最大上载大小为1k')
}
//另请参见.name、.type
});
$(':button')。在('click',function()上{
$.ajax({
//处理上载的服务器脚本
url:'upload.php',
键入:“POST”,
//表单数据
数据:新FormData($('form')[0]),
//告诉jQuery不要处理数据或担心内容类型
//您*必须*包括这些选项!
cache:false,
contentType:false,
processData:false,
//自定义XMLHttpRequest
xhr:function(){
var myXhr=$.ajaxSettings.xhr();
if(myXhr.upload){
//用于处理上载的进度
myXhr.upload.addEventListener('progress',函数(e){
if(如长度可计算){
$('progress').attr({
值:e.loaded,
马克斯:e.total,
});
}
},假);
}
返回myXhr;
},
});
});
upload.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

 ?>

我想您可以在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包含可以存储在数据库中的文件路径。

我想您可以在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包含可存储在数据库中的文件路径。

要实现suces函数,请使用此代码

JS:

PHP:

如果要发回多个值,请使用Json encode发回数据

代码:

PHP:

JS:


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

要实现suces函数,请使用此代码

JS:

PHP:

如果要发回多个值,请使用Json encode发回数据

代码:

PHP:

JS:



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

您的问题与您从ajax发送和接收数据的方式有关。您必须创建一个success函数来在ajax中接收数据。由于您使用Jquery ajax上载文件,因此将无法在$\u FILES变量中获取该文件。文件将被发送一个二进制数据到$\u POST变量中。您应该使用file\u put\u contents()函数将内容写入文件。例如,
file\u put\u contents('img.jpg',$\u POST['file'])我也尝试了下面提到的php代码。在该代码中,我正在打印$\u POST。它也不起作用。如果在$\u POST中没有得到任何东西,那么Ajax代码中就有问题。如果有任何错误,那么文件将不会上载。您的问题与您从Ajax发送和接收数据的方式有关。您必须创建一个success函数来在ajax中接收数据。由于您使用Jquery ajax上载文件,因此将无法在$\u FILES变量中获取该文件。文件将被发送一个二进制数据到$\u POST变量中。您应该使用file\u put\u contents()函数将内容写入文件。例如,
file\u put\u contents('img.jpg',$\u POST['file'])我也尝试了下面提到的php代码。在该代码中,我正在打印$u POST。它也不起作用。如果在$u POST中没有得到任何东西,那么Ajax代码中就有问题。如果有任何错误,那么文件将不会上载。是的,在编写成功函数后,我可以看到输出语句。我正在获取path alsoThank你写了这么多成功函数后,我可以看到输出语句。我得到的路径也非常感谢你much@Manasa很高兴听到我们的问题得到解决。非常感谢much@Manasa很高兴听到我们的问题得到解决。
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$_FILES['file']['name']);
$name = $_FILES['file']['tmp_name'];
echo $name;
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
));
 ...
  success: function(data){
    alert("Name: "+data.name);
    alert("Path: "+data.path);
  }