Uploadify重命名多个文件

时间:2013-06-21 18:42:47

标签: php uploadify

我正在项目中使用uploadify,并且我已经将php脚本重命名为单个文件,但如果一次上传多个文件,我不确定如何重复该过程?

我的php脚本在下面...

$targetFolder = '/img/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;

  $fileParts = pathinfo($_FILES['Filedata']['name']);
  $unique_hash = hash_hmac("md5", file_get_contents($_FILES['Filedata']['name']), SALT);
  $targetFile = rtrim($targetPath,'/') . '/' . $unique_hash .'-'.$_POST['userId'].'.'. $fileParts['extension'];


  #$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.';
  }
}

2 个答案:

答案 0 :(得分:0)

当您使用ajax时,您可以逐个发送每个文件的请求,然后您不必使用foreach或者您立即发送表单并使用下面的代码。

当您将所有文件一起发送时,您将在表单中使用以下内容:name=userfile[],以便您可以预先处理这样的文件:

foreach ($_FILES as $file) 
{     
 $uploadfile = $uploaddir . basename($file['name']);
 if (!move_uploaded_file($file["tmp_name"], $uploadfile)) 
 {
  echo set_e('error','Image ['.$i.'] not uploaded','');
 } 
}

答案 1 :(得分:0)

您是否尝试过不止一次? Uploadify使用jQuery ajax来处理文件?它可能看起来是同时的,但它通过ajax一次处理一个文件。它会像队列中的文件一样多次调用upload.php。因此,如果您的函数适用于一个文件,则其余部分将使用它。你只需要确保它每次调用函数时都在目录中写一个唯一的文件名,就像它看起来一样。 Uploadify处理循环遍历每个文件名然后调用上传脚本。

http://www.uploadify.com/demos/

使用Chrome或Firebug查看网络控制台,并在演示中上传一堆图片。你会看到为每个文件调用upload.php脚本。

FYI, 我以前使用uploadify但我改为PLUPLOAD http://www.plupload.com/。支持多个上传,但更好地记录,更容易使用与伟大的api。