class.upload.php is a powerful and mature PHP class to manage uploaded files, and manipulate images in many ways. The script is available under a GPL license.
Just needed some advice on passing the filename to the class using AJAX query. I got it working but cannot get the correct filenaem being used.
I have created HTML code for the image file. <input type="file" id="file" name="file" /> <input type="button" class="button" value="Upload" id="but_upload">
Whent the upload button is pressed, the jQuery calls AJAX to pass the form data to the php-page for processing.
var fd = new FormData();
var files = $('#file')[0].files[0];
fd.append('file',files);
$.ajax({
url: 'ajax_upload_image.php',
type: 'post',
data: fd,
contentType: false,
processData: false,
success: function(response){
$("#ajax_result").html(response);
},
});
The AJAX passes the file information to the PHP.
However the class.upload.php does not seem to be able to have the reference to the tmp file created when pressing the HTML upload button.
I can get the upload to work using the below lines:-
The $_FILES['file']['name'] has the correct image filename. But if I pass this via $handle = new Upload($filename);, the class complains that the image file is not found.
If I then use the $filename = $_FILES['file']['tmp_name'];, the class find the image file and uploads it correctly, but the filename become the tmp-file name e.g. php3851.jpg instead of the original filename.
Is there a workaround for this? I did not seem to find any AJAX related queries.Reply
Re: Passing file name through AJAX query to the class new!
Thank you - it works. Just as reference to other users, the core content of my ajax_upload_image.php is as follows. This responds to the AJAX query from the above code. The AJAX code passes the tmp-file name that the Upload class uses to upload the image, and the actual file name.
I'm then using PHP to format the image file name (remove .extension). And then $handle->file_new_name_body = $orig_file; command to set the file name for the saved image.
As Colin said there is probably XMLhttpRequest method to pass the information automatically but I could not get it working. But the AJAX way works now.
// Destination directory for images $dir_dest = '../product/images/';
// we create an instance of the class, giving as argument the PHP object // corresponding to the file field from the form // All the uploads are accessible from the PHP object $_FILES $handle = new Upload($filename); $return_arr = array();
// then we check if the file has been uploaded properly // in its *temporary* location in the server (often, it is /tmp) if ($handle->uploaded) {
// yes, the file is on the server // below are some example settings which can be used if the uploaded file is an image. $handle->image_convert = 'jpg'; $handle->image_resize = true; $handle->image_ratio_fill = true; $handle->image_x = 64; $handle->image_y = 64; $handle->file_new_name_body = $orig_file;
// now, we start the upload 'process'. That is, to copy the uploaded file // from its temporary location to the wanted location // It could be something like $handle->Process('/home/www/my_uploads/'); $handle->Process($dir_dest);
// we check if everything went OK if ($handle->processed) { // everything was fine ! echo 'File uploaded with success and formatted to 64x64 pixels (Small Image)'; echo '<img src="'.$dir_pics.'/' . $handle->file_dst_name . '" />'; $info = getimagesize($handle->file_dst_pathname); echo ' File: <a href="'.$dir_pics.'/' . $handle->file_dst_name . '">' . $handle->file_dst_name . ' '; echo ' (' . $info['mime'] . ' - ' . $info[0] . ' x ' . $info[1] .' - ' . round(filesize($handle->file_dst_pathname)/256)/4 . 'KB)'; } else { // one error occured echo 'File not uploaded to the wanted location'; echo 'Error: ' . $handle->error; }
// we delete the temporary files $handle-> Clean();
} else { // if we're here, the upload file failed for some reasons // i.e. the server didn't receive the file echo 'File not uploaded on the server'; echo 'Error: ' . $handle->error; }
I have created HTML code for the image file.
<input type="file" id="file" name="file" />
<input type="button" class="button" value="Upload" id="but_upload">
Whent the upload button is pressed, the jQuery calls AJAX to pass the form data to the php-page for processing.
The AJAX passes the file information to the PHP.
However the class.upload.php does not seem to be able to have the reference to the tmp file created when pressing the HTML upload button.
I can get the upload to work using the below lines:-
The $_FILES['file']['name'] has the correct image filename. But if I pass this via $handle = new Upload($filename);, the class complains that the image file is not found.
If I then use the $filename = $_FILES['file']['tmp_name'];, the class find the image file and uploads it correctly, but the filename become the tmp-file name e.g. php3851.jpg instead of the original filename.
Is there a workaround for this? I did not seem to find any AJAX related queries.
$filename = $_FILES['file']['name'];
echo "FILENAME : ". $filename;
Actually returns the correct filename.
So instead of tryin XMLHttpRequest (that I have not managed to get working), could I just use command like:
$handle->file_dst_name_body = 'test';
Which the upload class seems to ignore.
I'm then using PHP to format the image file name (remove .extension). And then $handle->file_new_name_body = $orig_file; command to set the file name for the saved image.
As Colin said there is probably XMLhttpRequest method to pass the information automatically but I could not get it working. But the AJAX way works now.