繁体   English   中英

如何在PHP中获取上传文件的相对路径作为变量(重新发布)

[英]How to get relative path of uploaded file as variable in php (repost)

如何获得上传文件的相对路径? 例如,如果我上传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。 如果您只知道该名称,请将该名称张贴出来。 提前致谢。

$file['name']包含文件的名称,假设为test1.png

这是将文件保存在特定位置的程序的位。 在这种情况下,文件夹uploads相对于当前工作目录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的目录并将其移动到该目录,然后重命名为用户名。

例如

$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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM