Get filepath after upload using uploadify without onComplete event? - php

I've been searching here and Google to find a working solution to get the filepath after upload using uploadify without onComplete event??
I'm using the latest version of Uploadify Version 3.2 which doesn't include onComplete event.
check the event list:
http://www.uploadify.com/documentation/
So I can't use that event.
I use the following code for the index.php as it comes with download files:
<body>
<h1>Uploadify Demo</h1>
<form>
<div id="queue"></div>
<input id="file_upload" name="file_upload" type="file" multiple="true">
</form>
<script type="text/javascript">
<?php $timestamp = time();?>
$(function() {
$('#file_upload').uploadify({
'formData' : {
'timestamp' : '<?php echo $timestamp;?>',
'token' : '<?php echo md5('unique_salt' . $timestamp);?>'
},
'swf' : 'uploadify.swf',
'uploader' : 'uploadify.php'
});
});
</script>
And I modified the uploadify.php to set new names for the uploaded files to avoid any problem while uploading the files as the following:
$new_name=microtime();
$new_name=str_replace(".","",$new_name);
$new_name=str_replace(" ","",$new_name);
$store_dir="uploaded/"; //directory to place uploaded files
$fileName = $_FILES['Filedata']['name'];
$fileTmp = $_FILES['Filedata']['tmp_name'];
$fileType = $_FILES["Filedata"]["type"];
$fileSize = ($_FILES["Filedata"]["size"] / 1024 / 1000);
$extension = substr($fileName, strrpos($fileName, "."));
$extension = strtolower($extension);
move_uploaded_file($_FILES['Filedata']['tmp_name'], $store_dir.$new_name.$extension);
So how to get the path to the uploaded file or even just the new file name.
Thanks for your help!

you should return some json from script.
echo json_encode(array('file' => $_FILES['Filedata']['tmp_name'], $store_dir.$new_name.$extension));
and then handle it by javascript

Related

I can't upload files using Uploadify onto my server

I am having problems when trying to upload files onto my server. I am using the uploadify plugin to upload files onto my server then store the filename in a database.
the problem is that uplodify acts like the file has been uploaded with no error but nothing is being uploaded.
I am runing PHP on a Windows 2008 R2 Server
the following is my php code that handle the actual upload.
<?php
require("../requires/LDAP_connection.php");
require("../requires/APP_configuration.php");
require("../requires/PHP_generic_functions.php");
//Include connection class
require('../classes/connection.php');
require('../requires/user_authentication.php'); //this file must be placed under the connection class NOT before
define('ROOT_SYS', dirname(__FILE__).'/');
// Define a destination
$targetFolder = '';
$verifyToken = '100';
$actualToken = '';
$fileTypes = array('jpg','jpeg','gif','png');
if(isset($_POST['upload_path'])){
$targetFolder = $_POST['upload_path'];
}
if(isset($_POST['timestamp'])){
$verifyToken = md5($_POST['timestamp']);
}
if(isset($_POST['token'])){
$actualToken = $_POST['token'];
}
if(isset($_POST['allowed_extentions'])){
$types = explode(',', $_POST['allowed_extentions']);
if(count($types) > 0 ){
$fileTypes = $types;
}
}
if (!empty($_FILES) && $actualToken == $verifyToken) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = ROOT_SYS . $targetFolder; //$_SERVER['DOCUMENT_ROOT']
$new_filename = USER_ID . '_' . time() . '_' . str_replace(" ", "_", $_FILES['Filedata']['name']);
$targetFile = $targetPath . $new_filename;
// Validate the file type
//$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($new_filename); //str_replace(" ", "_", $_FILES['Filedata']['name'])
if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$targetFile);
echo trim($new_filename);
} else {
echo 'INVALID';
}
}
?>
the following is my javascript
<?php $timestamp = time();?>
<script type="text/javascript">
$(function() {
$('#file_upload').uploadify({
'formData' : {
'timestamp' : '<?php echo $timestamp;?>',
'token' : '<?php echo md5($timestamp);?>',
'upload_path': 'add-ons/ticketing_system/uploads/',
'allowed_extentions': 'jpg,jpeg,gif,PNG,JPG,png,zip,rar,doc,docx,cvs,xls,xlsx,txt'
},
'auto' : true,
'swf' : '../../includes/uploadify.swf',
'uploader' : '../../includes/uploadify.php',
'fileSizeLimit' : '10MB',
'fileTypeExts' : '*.gif; *.jpg; *.JPG; *.png; *.PNG *.zip; *.rar; *.doc; *.docx; *.cvs; *.xls; *.xlsx; *.txt;',
'onUploadSuccess' : function(file, data, response) {
if(data != 'INVALID'){
$('#attached_files').append('<input type="hidden" name="attachments[]" value="'+ $.trim(data) +'" />');
} else {
alert('Invalid File Type');
}
}
});
});
</script>
What am I doing wrong? Why is it not uploading anything and also not giving me any error?
Thanks
Uploadify has a debug mode to help you with issues like this : http://www.uploadify.com/documentation/uploadifive/debug-2/
The things I usually look for are permissions errors...and maybe your authentication methods.

Uploadify is not working

I am using uploadify to upload multiple files on my website, but it is not working properly. I have fix various things in it but it is not working properly. issue is that when i upload the file it will show me the loading bar and when it completes it disappear but when i check the destination the file is not present in it. Please help me. My code is given below:
index.php
<form>
<div id="queue"></div>
<input id="file_upload" name="file_upload" type="file" multiple="true">
</form>
<script type="text/javascript">
<?php $timestamp = time();?>
$(function() {
$('#file_upload').uploadify({
'formData' : {
'timestamp' : '<?php echo $timestamp;?>',
'token' : '<?php echo md5('unique_salt' . $timestamp);?>'
},
'swf' : 'uploadify.swf',
'uploader' : 'uploadify.php'
});
});
</script>
uploadify.php
<?php
// Define a destination
$targetFolder = 'uploads/'; // Relative to the root
$verifyToken = md5('unique_salt' . $_POST['timestamp']);
if (!empty($_FILES) && $_POST['token'] == $verifyToken) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
$targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];
// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);
if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$targetFile);
echo '1';
} else {
echo 'Invalid file type.';
}
}
?>
As said by some comments, when uploading using PHP, you need to give writing permissions to the upload directory. If you use filezilla, simply rightclick on the folder on the server, click fileattributes, and set it to, for example 775.
Had a similar problem just yesterday. My problem was that my upload_max_filesize, located in the php.ini, was set to 2M. I boosted it up to 4M and TADA, problem solved. If you do seem to be having the same issue, don't forget to restart your server. ;)

pass data to uploadify

okay, i have a form dropdown
<select name="select_category" id="select_category">
<option value="cheese-cakes">Cheesecakes</option>
<option value="fruit-cakes">Fruitcakes</option>
</select>
and a hidden text input
<input type="hidden" id="category_container" />
in my jquery/javascript
$('#select_category').change(function(){
var cat = $('#select_category option:selected').attr('value');
$('#category_container').attr('value',cat);
});
uploadify
var plug = '<?php echo plugins_url('plugin_name') ?>';
$('#file_upload').uploadify({
'formData' : {'cat_name' : $('#category_container').attr('value')},
swf' : plug + '/uploadify/uploadify.swf',
'uploader' : plug + '/uploadify/uploadify.php'
});
I want to pass the value of the text box #category_container as post data and send it to uploadify.php, so that the filename that would be saved is the value of the textbox/data passed.
The problem is that, there's a file that's been uploaded but there's no filename. example: it only uploads '.png' , '.jpg' files
uploadify.php
$name = $_GET['cat_name'];
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $targetFolder;
$targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];
$path = pathinfo($targetFile);
$newTargetFile = $targetFolder.$name.'.'.$path['extension'];
// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);
if (in_array($fileParts['extension'],$fileTypes)) {
move_uploaded_file($tempFile,$newTargetFile);
echo $newTargetFile;
} else {
echo 'Invalid file type.';
}
This code was missing.
'onUploadStart':function(file){
$('#file_upload').uploadify('settings','formData',{'cat_name' : $('#category_image_name').val()});
}
question closed.

Uploadify FOLDER

I am using Uploadify to upload Files and using Codeigniter framework.
Here is my Uploadify code :
$("#change_profile_icon").uploadify({
'uploader' : '/project/style/scripts/crop/uploadify/uploadify.swf',
'script' : 'http://localhost/project/pages/profile_icon',
'cancelImg' : '/project/style/scripts/crop/uploadify/cancel.png',
'buttonText' :'Upload image',
'width' : '110',
'height' : '30',
'queueID' : 'fileQueue',
'auto' : true,
'scriptData' :{username :"<?php echo $this->session->userdata('username');?>",folder:"honda"},
'queueSizeLimit' : 1,
'multi' : false,
'fileDesc' : 'jpg',
'fileExt' : '*.jpg;*.png',
'sizeLimit' : '819200',//max size bytes - 800kb
'onComplete' : function(event,queueID,fileObj,response,data) {
alert("Completed");
var dataresponse = eval('(' + response + ')');
//$('#uploadifyUploader').remove();
var filenametmp = "http://localhost"+(dataresponse.file).substring(0,(dataresponse.file).lastIndexOf("?"));
var current_page = $('#page-list').val();
},
'onSelect' : function (){
var folder = $('#page-list option:selected').text(); //returns HONDA which is correct
$('#change_profile_icon').uploadifySettings('folder',folder);
} ,
'onError' : function(){
alert('error');
}
});
Here is my PHP part [script value in Uploadify]
function profile_icon()
{
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
// $fileTypes = str_replace('*.','',$_REQUEST['fileext']);
// $fileTypes = str_replace(';','|',$fileTypes);
// $typesArray = split('\|',$fileTypes);
// $fileParts = pathinfo($_FILES['Filedata']['name']);
// if (in_array($fileParts['extension'],$typesArray)) {
// Uncomment the following line if you want to make the directory if it doesn't exist
$targetPath = 'uploads/' .$_REQUEST['folder']. '/';
$targetFile = $targetPath.$_FILES['Filedata']['name'];
if (!file_exists($targetPath))
{
mkdir(str_replace('//','/',$targetPath), 0755, true);
}
move_uploaded_file($tempFile,$targetFile);
echo str_replace($_SERVER['DOCUMENT_ROOT'],'',$targetFile);
// } else {
// echo 'Invalid file type.';
// }
}
Problem :
$targetPath = 'uploads/' .$_REQUEST['folder']. '/';
$targetFile = $targetPath.$_FILES['Filedata']['name'];
if (!file_exists($targetPath))
{
mkdir(str_replace('//','/',$targetPath), 0755, true);
}
Check the above codes taken from the PHP part.I think that $_REQUEST['folder'] will give the folder name which is specified on the Uploadify script.The value of folder is Honda
But this gives something different.
I uploaded a file and this script uploaded it to
C:\wamp\www\project\uploads\project\home\editpage\honda\honda
On wamp server [I am in Localhost]
But how it comes ?? it should be
C:\wamp\www\project\uploads\honda
Check the below...
$targetPath = 'uploads/' .$_REQUEST['folder']. '/';
$targetFile = $targetPath.$_FILES['Filedata']['name'];
The targetPath should be now uploads/honda/
and targetFile should be now uploads/honda/fileName.ext
I dont know what i am doing wrong and where it is....
Please help me.
Thank you .
EDIT : THE URL STRUCTURE OF CURRENT PAGE : http://localhost/Project/home/editpage/honda/
Where home is a controller and editpage is a function and honda is a argument.[Codeigniter framework]
SOLVED
I solved the issue,it is a bug in uploadify : The uploadify folder variable is not straight forward ,so that we should add a slash before that.
so it would be var folder = "/"+ "FolderName";
The problem is u cant return the data on server if u use just Folder name.
I solved the issue,it is a bug in uploadify : The uploadify folder variable is not straight forward ,so that we should add a slash before that.
so it would be var folder = "/"+ "FolderName"; The problem is u cant return the data on server if u use just Folder name.
I will think you will get a lot of help to put your output into a file, :)
$myFile = "[full-folder-path]testFile.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
$stringData = $_FILES['Filedata']['name'] ." | ". print_r( $_REQUEST, true ) ."\n";
fwrite($fh, $stringData);
fclose($fh);
But i think if you changes your line $targetPath to this
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
Remeber your folder need read/wirte rulls, its the only thing i can see its worng from your basic script to my script.
Just provide the folder where you want to upload in the settings as
<script type="text/javascript">
$(document).ready(function() {
$('#file_upload').uploadify({
'uploader' : '/uploadify/uploadify.swf',
'script' : '/uploadify/uploadify.php',
'cancelImg' : '/uploadify/cancel.png',
'folder' : '/uploads',
'auto' : true
});
});
</script>
As in the above settings you missed out the folder option.

How to get a unique name for each uploaded file using uploadify

I am uploading files using jQuery uploadify plugin. All files are uploaded into same directory. When I try to upload a file twice, it give me following error.
filename.gif (4.3KB) - IO Error
I want to upload a file with unique name every time. There are many other users uploading files in same directory. So there is a chance that two users share same file name. How can I avoid overwritten.
My Code:
$('.SingleFileUpload').uploadify({
'uploader' : '/uploadify/uploadify.swf',
'script' : '/uploadify/uploadify.php',
'cancelImg' : '/uploadify/cancel.png',
'folder' : '/uploads',
'auto' : true,
'queueID' : 'fileQueue',
'removeCompleted':false,
'onComplete' : function(event, ID, fileObj, response, data) {
$(event.target).closest('form').append( '<input type="hidden" name="uploaded_file" value="' + response + '">' );
}
});
To start off, reject duplicate file names:
$targetFolder = '/uploads'; // Relative to the root
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
$targetFile = rtrim($targetPath,'/') . $_FILES['Filedata']['name'];
// Validate the file type
$fileTypes = array('jpg','jpeg','gif','png'); // File extensions
$fileParts = pathinfo($_FILES['Filedata']['name']);
if (in_array($fileParts['extension'],$fileTypes)) {
if (file_exists($targetFile)){
echo 'File does already exist, choose another name!';
}
else {
move_uploaded_file($tempFile,$targetFile);
echo '1';
}
} else {
echo 'Invalid file type.';
}
}
?>
You can prefix all of your file names by the ID of the user + an underscore (or any character to separate the ID from the file name, to avoid UID1 + 2file == UID12 + file.
Instead of forcing the user to choose another name, you can also implement an automated name change: Either by adding a prefix and/or postfix, or by calculating the hash of the file. The last option also prevents duplicate files (same name, same contents) from appearing at the server.
I don't think using javascript is good or safe for this, one method I use is to name each file by calculate its SHA1 on server side.
I'm duplicating the filename and adding the copynr at the end. like:
filename(2)
filename(3)
filename(4) etc.
$('#upload').uploadify({
'uploader' : 'resources/plugins/uploadify/uploadify.swf',
'script' : 'resources/plugins/uploadify/uploadify.php',
'cancelImg' : 'resources/plugins/uploadify/cancel.png',
'folder' : 'uploads/',
'auto' : true,
'multi' : false,
'fileDesc' : '*.jpg;*.jpeg;*.png;*.gif;',
'fileExt' : '*.jpg;*.jpeg;*.png;*.gif;',
onComplete: function (evt, queueID, fileObj, response, data){
alert(response); // = uploaded filename
}
just the uploadify JS part (not using the check method!)
Now the uploadify.php part
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$ext = '.'.pathinfo($_FILES['Filedata']['name'], PATHINFO_EXTENSION);
$filename = substr($_FILES['Filedata']['name'],0,-strlen($ext));
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $filename . $ext;
while(file_exists($targetFile)){
preg_match('/\([0-9]{1,}\)$/', $filename,$matches);
if(!empty($matches)){
preg_match('/[0-9]{1,}/', $matches[0],$nr);
$filename = substr($filename,0,-strlen($matches[0])) . '('.(((int)$nr[0])+1).')';
}else
$filename .= '(2)';
$targetFile = str_replace('//','/',$targetPath) .$filename . $ext;
}
if(!is_dir($targetPath)) mkdir(str_replace('//','/',$targetPath), 0755, true);
move_uploaded_file($tempFile,$targetFile);
echo $filename.$ext;}
HTH

Categories