2011-09-08 98 views
0

我尝试使用PHP上传的服务器多张照片,下面是我用来上传代码:问题PHP多图片上传

private function handle_file_upload($uploaded_file, $name, $size, $type, $error) { 
    $file = new stdClass(); 
    // Remove path information and dots around the filename, to prevent uploading 
    // into different directories or replacing hidden system files. 
    // Also remove control characters and spaces (\x00..\x20) around the filename: 
    $file->name = trim(basename(stripslashes($name)), ".\x00..\x20"); 
    $file->size = intval($size); 
    $file->type = $type; 
    $error = $this->has_error($uploaded_file, $file, $error); 
    if (!$error && $file->name) { 
     $file_path = $this->options['upload_dir'].$file->name; 
     $append_file = is_file($file_path) && $file->size > filesize($file_path); 
     clearstatcache(); 
     if ($uploaded_file && is_uploaded_file($uploaded_file)) { 
      // multipart/formdata uploads (POST method uploads) 
      if ($append_file) { 
       file_put_contents(
        $file_path, 
        fopen($uploaded_file, 'r'), 
        FILE_APPEND 
       ); 
      } else { 
       move_uploaded_file($uploaded_file, $file_path); 
      } 
     } else { 
      // Non-multipart uploads (PUT method support) 
      file_put_contents(
       $file_path, 
       fopen('php://input', 'r'), 
       $append_file ? FILE_APPEND : 0 
      ); 
     } 
     $file_size = filesize($file_path); 
     if ($file_size === $file->size) { 
      $file->url = $this->options['upload_url'].rawurlencode($file->name); 
      foreach($this->options['image_versions'] as $version => $options) { 
       if ($this->create_scaled_image($file->name, $options)) { 
        $file->{$version.'_url'} = $options['upload_url'] 
         .rawurlencode($file->name); 
       } 
      } 
     } else if ($this->options['discard_aborted_uploads']) { 
      unlink($file_path); 
      $file->error = 'abort'; 
     } 
     $file->size = $file_size; 
     $file->delete_url = $this->options['script_url'] 
      .'?file='.rawurlencode($file->name); 
     $file->delete_type = 'DELETE'; 
    } else { 
     $file->error = $error; 
    } 
    return $file; 
} 



public function post() { 
    $upload = isset($_FILES[$this->options['param_name']]) ? 
     $_FILES[$this->options['param_name']] : array(
      'tmp_name' => null, 
      'name' => null, 
      'size' => null, 
      'type' => null, 
      'error' => null 
     ); 
    $info = array(); 
    if (is_array($upload['tmp_name'])) { 
     foreach ($upload['tmp_name'] as $index => $value) { 
      $info[] = $this->handle_file_upload(
       $upload['tmp_name'][$index], 
       isset($_SERVER['HTTP_X_FILE_NAME']) ? 
        $_SERVER['HTTP_X_FILE_NAME'] : $upload['name'][$index], 
       isset($_SERVER['HTTP_X_FILE_SIZE']) ? 
        $_SERVER['HTTP_X_FILE_SIZE'] : $upload['size'][$index], 
       isset($_SERVER['HTTP_X_FILE_TYPE']) ? 
        $_SERVER['HTTP_X_FILE_TYPE'] : $upload['type'][$index], 
       $upload['error'][$index] 
      ); 
     } 
    } else { 
     $info[] = $this->handle_file_upload(
      $upload['tmp_name'], 
      isset($_SERVER['HTTP_X_FILE_NAME']) ? 
       $_SERVER['HTTP_X_FILE_NAME'] : $upload['name'], 
      isset($_SERVER['HTTP_X_FILE_SIZE']) ? 
       $_SERVER['HTTP_X_FILE_SIZE'] : $upload['size'], 
      isset($_SERVER['HTTP_X_FILE_TYPE']) ? 
       $_SERVER['HTTP_X_FILE_TYPE'] : $upload['type'], 
      $upload['error'] 
     ); 
    } 
    header('Vary: Accept'); 
    if (isset($_SERVER['HTTP_ACCEPT']) && 
     (strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)) { 
     header('Content-type: application/json'); 
    } else { 
     header('Content-type: text/plain'); 
    } 
    echo json_encode($info); 
} 

目前的代码工作正常上传图片,但图片存储原始图像名称到服务器,如果我再次上传相同的图像,它不会允许我将重复的图像存储在服务器中,并且一些图像是不同的类型,如png或gif,我想要做的是我想要为所有上传的图像分配一个唯一的ID并将所有图像保存到服务器中的jpg文件中,我该如何实现这一目标,如果您可以根据我的代码进行说明,那将非常好,谢谢!

+0

为什么你要转换为JPEG:这个功能

$file->name = uniqid(); 

更多信息? – TRiG

回答