如何在php(repost)中将上传文件的相对路径作为变量

时间:2017-01-06 11:30:47

标签: php html file-upload upload

如何获取上传文件的相对路径?例如,如果我上传test.png,我会得到/upload/test.png。这是我的HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Jquery Ajax File Upload</title>
</head>
<body>

    <div class="col-sm-6">
        <div class="form-group ">
            <label>Profile image</label>
            <div class="input-group">
                <span class="input-group-addon"><i class="fa fa-image"></i></span> 
                <input type="text" class="form-control" name="profile_image" autocomplete="off" value="" placeholder="" >
                 <label class="btn btn-default btn-file input-group-addon">
    Browse <input type="file" name="image" style="display: none;" onchange="myFunction()" id="image" >
</label>
<div class="result"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script>

        $('#image').change(function(e){
            var file = this.files[0];
            var form = new FormData();
            form.append('image', file);
            $.ajax({
                url : "http://192.168.1.147/upload.php",
                type: "POST",
                cache: false,
                contentType: false,
                processData: false,
                data : form,
                success: function(response){
                    $('.result').html(response.html)
                }
            });
        });

    </script>

            </div>
        </div>
    </div>

</body>
</html>

PHP:

<?php

$file = $_FILES['image'];


/* Allowed file extension */
$allowedExtensions = ["gif", "jpeg", "jpg", "png", "svg"];

$fileExtension = explode(".", $file["name"]);

/* Contains file extension */
$extension = end($fileExtension);

/* Allowed Image types */
$types = ['image/gif', 'image/png', 'image/x-png', 'image/pjpeg', 'image/jpg', 'image/jpeg','image/svg+xml'];

if(in_array(strtolower($file['type']), $types) 
    // Checking for valid image type
    && in_array(strtolower($extension), $allowedExtensions) 
    // Checking for valid file extension
    && !$file["error"] > 0)
    // Checking for errors if any
    { 
    if(move_uploaded_file($file["tmp_name"], 'uploads/'.$file['name'])){
        header('Content-Type: application/json');
        echo json_encode(['html' => /*return uploded file path and name*/ ]);    
        echo $_FILES['upload']['name'];
    }else{
        header('Content-Type: application/json');
        echo json_encode(['html' => 'Unable to move image. Is folder writable?']);    
    }
}else{    
    header('Content-Type: application/json');
    echo json_encode(['html' => 'Please upload only png, jpg images']);
}

?>

代码有效,即上传文件,但我不知道如何获取路径。路径可能会更改,因为它用于用户配置文件图像,稍后我会将上载路径更改为/ $ username。如果你知道如何得到这个名字,请发帖。提前谢谢。

1 个答案:

答案 0 :(得分:0)

$file['name']包含文件的名称,例如test1.png

这是将文件保存在特定位置的程序。在这种情况下,文件夹uploads相对于当前工作目录。

if(move_uploaded_file($file["tmp_name"], 'uploads/'.$file['name'])){
    header('Content-Type: application/json');
    echo json_encode(['html' =>  
                       /* you might want to output something like */
                          getcwd().'/uploads/'.$file['name']
                        // getcwd()    current working directory
                        // it may be that you need a relative path based on 
                        // where your application lives to generate a url, for example
                        // 'http://your_app_base_url/'.'/uploads/'.$file['name']
                     ]);    
    echo $_FILES['upload']['name']; // this will be empty unless there is a file form field with the name 'upload' 
                                   // compare with $_FILE['image'] above
}else{
    header('Content-Type: application/json');
    echo json_encode(['html' => 'Unable to move image. Is folder writable?']);    
}

如果您想稍后移动该文件,您可以拥有一个名为profile_pics的目录并将其移至那里,并重命名为用户名。

e.g。

$oldfilename = $file['name'];

//create a name for the file based on username and uploaded file extension (.jpg/.png)
$newfilename = $username.'_profile.'.pathinfo($oldfilename,PATHINFO_EXTENSION);

//this will rename /move the file from uploads to profile_pics (directory must exist already)
rename('uploads/'.$oldfilename,'profile_pics/'.$newfilename);