无法使用Uploadify脚本上传文件

时间:2010-09-04 22:07:26

标签: php jquery

我正在使用Uploadify插件上传文件。虽然这可能是一个非常基本的问题,我无法理解和实现,以使其工作上传文件。

我想使用uploadify

实现以下功能

当用户选择文件时,我希望使用PHP将其直接上传到目标路径。

现在我使用以下代码。

<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>
</body>

这是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";

我只想上传一个文件。我需要包含check.php吗?我如何做出像用户选择图像文件时直接执行操作并移动到指定目录的东西。

P.S:我对javascript和jquery有基本的了解。 :)

注意:文件上传问题现在解决了。

  

如何限制用户上传   我想要一个按钮上只有一个文件   比如当用户选择时   文件,它上传该按钮   应该被禁用或其他什么

编辑:为了限制用户在按钮中上传多个文件,我添加了此代码,当用户多次选择时,它仍然会上传许多文件。这是我的代码。

<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>

它出了什么问题?

2 个答案:

答案 0 :(得分:3)

几周前我和这个人争吵不休。您需要更改fileDataName属性。默认情况下,它是Filedata。您尝试在此部分file$_FILES['file']访问它:<{1}}。

$_FILES['file']的所有实例更改为$_FILES['Filedata']或将此属性添加到$('#someID').uploadify({});属性集合中:fileDataName:'file'

如果您正在寻找插件修补程序,只需在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'
      }); 
}); 

请注意'fileDataName' : 'file'

限制一次上传(当然,只要页面没有刷新):

将您的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',
      onSelect : function(){
           $("#someID input").attr("disabled", true);
      }}); 
}); 

只要知道如果用户刷新页面,该按钮将再次启用,允许他们上传另一个文件。他们也可以手动重新启用它。因此,添加服务器端检查以确保它们不会上传其他文件(如果您不希望它们)。

答案 1 :(得分:1)

需要考虑的一些要点:

  1. 检查是否存在$_FILES不是确认上传的正确方法。如果由于任何原因导致上载失败(文件太大,连接中断,磁盘空间不足等),那么仍然会有一个$_FILES数组。你需要做类似\

    的事情 而是{p> if ($_FILES['nameoffield']['error'] === UPLOAD_ERR_OK)

    错误常量在此处定义:http://ca.php.net/manual/en/features.file-upload.errors.php

  2. 您的路径构建代码将完全打开您的服务器到基于文件的远程接管:您在路径中盲目地使用$_REQUEST['folder']。如果有人破坏表单并将文件夹设置为../../../../../../../../some/nasty/place/on/your/system
  3. ,该怎么办?
  4. 没有碰撞检测,因此您的脚本将很乐意使用上传的文件覆盖现有文件
  5. 您不检查move_uploaded_file()是否实际成功。如果由于某种原因无法移动文件,则返回布尔值FALSE。你只是盲目地回应一个'1'来通知客户端javascript发生了什么事。