html - How to get relative path of uploaded file as variable in php (repost)
How can I get the relative path to my uploaded file? For example if I upload test.png I would get /upload/test.png. Here is my HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Jquery Ajax File Upload</title>
</head>
<body>
<div >
<div >
<label>Profile image</label>
<div >
<span ><i ></i></span>
<input type="text" name="profile_image" autocomplete="off" value="" placeholder="" >
<label >
Browse <input type="file" name="image" onchange="myFunction()" id="image" >
</label>
<div ></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']);
}
?>
The code works, that is upload the file but I don't know how to get the path back. The path may change because its for a user profile image and later I will change the upload path to one that is /$username. If you know how get the name only please post that anyway. Thanks in advance.
Answer
Solution:
$file['name']
has the name of the file in it, lets saytest1.png
This is the bit of the program that saves your file in a specific location. In this case the folder
uploads
relative to the current working directory.If you want to move the file later, you could have a directory called
profile_pics
and move them to there, and rename to the username.e.g.