I am using the Uploadify Plugin to Upload files. although this might be a very basic question i am unable to understand and implement to get it work to upload the files.
I want to achieve the following using uploadify
when a user select the file i want it to be directly uploaded to the target path using PHP.
now i am using the following code.
<html>
<head>
<link rel="stylesheet" href="css/uploadify.css" type="text/css" />
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="js/jquery.uploadify.v2.1.0.min.js"></script>
<script type="text/javascript" src="js/swfobject.js"></script>
</head>
<script type="text/javascript">
$(document).ready(function() {
$('#someID').uploadify({
'uploader': 'img/uploadify.swf',
'script': 'uploadify.php',
'folder': 'upload',
'cancelImg': 'img/cancel.png',
'auto': 'true',
'fileDesc': 'jpg/jpeg',
'displayData': 'percentage',
'fileExt': "*.jpg;*.jpeg",
'sizeLimit' : '8388608'
}); });
</script>
<body>
<form id="someID" action="uploadify.php" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="fileUpload1"/>
<p><input type="submit" name="submit" value="Upload" /></p>
</form>
</bod开发者_运维百科y>
and this is the code for uploadify.php
if (!empty($_FILES)) {
$tempFile = $_FILES['file']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = str_replace('//','/',$targetPath) . $_FILES['file']['name'];
move_uploaded_file($tempFile,$targetFile);
echo "1";
I just want to upload a single file. do i need to include the check.php for that. how do i make something like when a user select the image file it directly performs the operation and move to the designated directory.
P.S: I have the very basic understanding of javascript and jquery. :)
Note : file uploading problem is solved now.
how do i limit the user from uploading just one file on one button, i want something like when a user select the file and it gets uploaded that button should be disabled or something
EDIT : for limiting the users from uploading multiple file in a button i added this code and it is still uploading many files as and when users select multiple times. here is my code.
<script type="text/javascript">
$(document).ready(function() {
$('#someID').uploadify({
'uploader': 'img/uploadify.swf',
'script': 'uploadify.php',
'folder': 'upload',
'cancelImg': 'img/cancel.png',
'auto': 'true',
'fileDesc': 'jpg/jpeg',
'displayData': 'percentage',
'fileExt': "*.jpg;*.jpeg",
'sizeLimit' : '8388608',
'fileDataName' : 'file',
onSelect : function(){
$("#someID input").attr("disabled", true);
}
}); });
</script>
what is wrong with it?
I was wrangling with this a few weeks ago. You need to change your fileDataName attribute. By default, it is Filedata. You are trying to access it as file in this part: $_FILES['file'].
Either change all instances of $_FILES['file'] to $_FILES['Filedata'] or add this attribute to your $('#someID').uploadify({}); attribute collection: fileDataName:'file'.
If you are looking for a drop-in fix, just make this change in your JavaScript:
$(document).ready(function() {
$('#someID').uploadify({
'uploader': 'img/uploadify.swf',
'script': 'uploadify.php',
'folder': 'upload',
'cancelImg': 'img/cancel.png',
'auto': 'true',
'fileDesc': 'jpg/jpeg',
'displayData': 'percentage',
'fileExt': "*.jpg;*.jpeg",
'sizeLimit' : '8388608',
'fileDataName' : 'file'
});
});
Note the 'fileDataName' : 'file'
To limit a single upload (as long as the page isn't refreshed, of course):
Change your JavaScript to this:
$(document).ready(function() {
$('#someID').uploadify({
'uploader': 'img/uploadify.swf',
'script': 'uploadify.php',
'folder': 'upload',
'cancelImg': 'img/cancel.png',
'auto': 'true',
'fileDesc': 'jpg/jpeg',
'displayData': 'percentage',
'fileExt': "*.jpg;*.jpeg",
'sizeLimit' : '8388608',
onSelect : function(){
$("#someID input").attr("disabled", true);
}});
});
Just know that if the user refreshes the page, the button will be enabled again allowing them to upload another file. They can also re-enable it manually. So, add a server-side check to make sure that they don't upload another file if you don't want them to.
Some points to consider:
Checking for the existence of
$_FILESis not the proper way to confirm an upload. If an upload fails for any reason (file too large, connection died, out of disk space, etc..), there will STILL be a$_FILESarray. You need to do something like \if ($_FILES['nameoffield']['error'] === UPLOAD_ERR_OK)instead.Error constants are defined here: http://ca.php.net/manual/en/features.file-upload.errors.php
- Your path building code as is opens your server completely to a remote file-based takeover: you're blindly using
$_REQUEST['folder']in your path. What if someone subverts the form and sets folder to../../../../../../../../some/nasty/place/on/your/system? - There's no collision detection, so your script will happily overwrite an existing file with the uploaded one
- You don't check if the
move_uploaded_file()actually succeeded. It returns booleanFALSEif it couldn't move the file for whatever reason. You just blindly echo out a '1' to inform the client-side javascript that something happened.
加载中,请稍侯......
精彩评论