1

在将文件发送到服务器之前,我可以更改文件的名称,例如名称为“0124.jpg”的图像吗?

<input id="f1" style="margin-bottom: 5px;" type="file"  name="f1" onchange="javascript:readURL_f1(this);"/>
<input id="f2" style="margin-bottom: 5px;" type="file"  name="f1" onchange="javascript:readURL_f2(this);"/>

如果文件是从 f1 上传的,那么在发送到服务器之前,名称应该变成 pic1_[filename].jpg,而不是仅仅发送原始文件名。我不希望这在服务器端完成,因为我认为它可能很复杂。

编辑: Upload.php 是我的 php 文件,它上传文件中的任何内容。所以,这对我来说是一个挑战。我可以更改文件名,但在所有三个上传中都会更改。例如,我为传入的文件名添加了一个“_”。然后,它被更改为所有文件名。无论如何从客户端?

我的上传脚本:Upload.php

上传.php

<?php mysql_connect('localhost','root','phpmyadmin');
 $connected = mysql_select_db('image_Upload');
 ?>
<noscript>
<div align="center"><a href="index.php">Go Back To Upload Form</a></div><!-- If javascript is disabled -->
</noscript>
<?php
//If you face any errors, increase values of "post_max_size", "upload_max_filesize" and "memory_limit" as required in php.ini
 //Some Settings
$ThumbSquareSize         = 200; //Thumbnail will be 200x200
$BigImageMaxSize         = 500; //Image Maximum height or width
$ThumbPrefix            = "thumb_"; //Normal thumb Prefix
$DestinationDirectory    = 'uploads/'; //Upload Directory ends with / (slash)
$Quality                 = 90;
$id = 'm123';
//ini_set('memory_limit', '-1'); // maximum memory!

foreach($_FILES as $file)
{
// some information about image we need later.
$ImageName         = $file['name'];
$ImageSize         = $file['size'];
$TempSrc         = $file['tmp_name'];
$ImageType         = $file['type'];

if (is_array($ImageName))
{
    $c = count($ImageName);

    echo  '<ul>';

    for ($i=0; $i < $c; $i++)
    {

        $processImage            = true;    
        $RandomNumber            = rand(0, 9999999999);  // We need same random name for both files.

        if(!isset($ImageName[$i]) || !is_uploaded_file($TempSrc[$i]))
        {
            echo '<div class="error">Error occurred while trying to process <strong>'.$ImageName[$i].'</strong>, may be file too big!</div>'; //output error
        }
        else
        {
            //Validate file + create image from uploaded file.
            switch(strtolower($ImageType[$i]))
            {
                case 'image/png':
                    $CreatedImage = imagecreatefrompng($TempSrc[$i]);
                    break;
                case 'image/gif':
                    $CreatedImage = imagecreatefromgif($TempSrc[$i]);
                    break;
                case 'image/jpeg':
                case 'image/pjpeg':
                    $CreatedImage = imagecreatefromjpeg($TempSrc[$i]);
                    break;
                default:
                    $processImage = false; //image format is not supported!
            }
            //get Image Size
            list($CurWidth,$CurHeight)=getimagesize($TempSrc[$i]);

            //Get file extension from Image name, this will be re-added after random name
            $ImageExt = substr($ImageName[$i], strrpos($ImageName[$i], '.'));
            $ImageExt = str_replace('.','',$ImageExt);

            //Construct a new image name (with random number added) for our new image.
            $NewImageName = $id.'_'.'pic'.($i+1).'.'.$ImageExt;

            //Set the Destination Image path with Random Name
            $thumb_DestRandImageName     = $DestinationDirectory.$ThumbPrefix.$NewImageName; //Thumb name
            $DestRandImageName             = $DestinationDirectory.$NewImageName; //Name for Big Image

            //Resize image to our Specified Size by calling resizeImage function.
            if($processImage && resizeImage($CurWidth,$CurHeight,$BigImageMaxSize,$DestRandImageName,$CreatedImage,$Quality,$ImageType[$i]))
            {
                //Create a square Thumbnail right after, this time we are using cropImage() function
                if(!cropImage($CurWidth,$CurHeight,$ThumbSquareSize,$thumb_DestRandImageName,$CreatedImage,$Quality,$ImageType[$i]))
                    {
                        echo 'Error Creating thumbnail';
                    }
                    /*
                    At this point we have succesfully resized and created thumbnail image
                    We can render image to user's browser or store information in the database
                    For demo, we are going to output results on browser.
                    */

                    //Get New Image Size
                    list($ResizedWidth,$ResizedHeight)=getimagesize($DestRandImageName);
                    echo '<table width="100%" border="0" cellpadding="4" cellspacing="0">';
                    echo '<tr>';
                    echo '<td align="center"><img src="uploads/'.$ThumbPrefix.$NewImageName.
                    '" alt="Thumbnail" height="'.$ThumbSquareSize.'" width="'.$ThumbSquareSize.'"></td>';
                    echo '</tr><tr>';
                    echo '<td align="center"><img src="uploads/'.$NewImageName.
                    '" alt="Resized Image" height="'.$ResizedHeight.'" width="'.$ResizedWidth.'"></td>';
                    echo '</tr>';
                    echo '</table>';

                    if(isset($id))
                    {
                        mysql_query("UPDATE imagetable SET ImageName='$DestRandImageName',ThumbName='$thumb_DestRandImageName',
                        ImgPath='uploads/' WHERE id='$id'");

                    }
                    else{
                        mysql_query("INSERT INTO imagetable (id, ImageName, ThumbName, ImgPath)
                        VALUES ('$id','$DestRandImageName', '$thumb_DestRandImageName', 'uploads/')");    
                    }

            }else{

                echo '<div class="error">Error occurred while trying to process <strong>'.$ImageName.
                '</strong>! Please check if file is supported</div>';
            }

        }

    }
    echo '</ul>';
    }
}

// This function will proportionally resize image
function resizeImage($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType)
{
    //Check Image size is not 0
    if($CurWidth <= 0 || $CurHeight <= 0)
    {
        return false;
    }

    //Construct a proportional size of new image
    $ImageScale          = min($MaxSize/$CurWidth, $MaxSize/$CurHeight);
    $NewWidth              = ceil($ImageScale*$CurWidth);
    $NewHeight             = ceil($ImageScale*$CurHeight);

    if($CurWidth < $NewWidth || $CurHeight < $NewHeight)
    {
        $NewWidth = $CurWidth;
        $NewHeight = $CurHeight;
    }
    $NewCanves     = imagecreatetruecolor($NewWidth, $NewHeight);
    // Resize Image
    if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight))
    {
        switch(strtolower($ImageType))
        {
            case 'image/png':
                imagepng($NewCanves,$DestFolder);
                break;
            case 'image/gif':
                imagegif($NewCanves,$DestFolder);
                break;            
            case 'image/jpeg':
            case 'image/pjpeg':
                imagejpeg($NewCanves,$DestFolder,$Quality);
                break;
            default:
                return false;
        }
    if(is_resource($NewCanves)) {
      imagedestroy($NewCanves);
    }
    return true;
    }

}

//This function corps image to create exact square images, no matter what its original size!
function cropImage($CurWidth,$CurHeight,$iSize,$DestFolder,$SrcImage,$Quality,$ImageType)
{     
    //Check Image size is not 0
    if($CurWidth <= 0 || $CurHeight <= 0)
    {
        return false;
    }

    if($CurWidth>$CurHeight)
    {
        $y_offset = 0;
        $x_offset = ($CurWidth - $CurHeight) / 2;
        $square_size     = $CurWidth - ($x_offset * 2);
    }else{
        $x_offset = 0;
        $y_offset = ($CurHeight - $CurWidth) / 2;
        $square_size = $CurHeight - ($y_offset * 2);
    }

    $NewCanves     = imagecreatetruecolor($iSize, $iSize);    
    if(imagecopyresampled($NewCanves, $SrcImage,0, 0, $x_offset, $y_offset, $iSize, $iSize, $square_size, $square_size))
    {
        switch(strtolower($ImageType))
        {
            case 'image/png':
                imagepng($NewCanves,$DestFolder);
                break;
            case 'image/gif':
                imagegif($NewCanves,$DestFolder);
                break;            
            case 'image/jpeg':
            case 'image/pjpeg':
                imagejpeg($NewCanves,$DestFolder,$Quality);
                break;
            default:
                return false;
        }
    if(is_resource($NewCanves)) {
      imagedestroy($NewCanves);  
    }
    return true;

    }




}
4

2 回答 2

4

当您上传文件时,您通常遵循此工作流程

  1. 用户选择一个文件并点击上传
  2. 服务器从临时文件夹中提取文件 - 检查 MimeType、调整大小和重命名文件并将其存储到文件服务器上您想要的任何位置。
  3. 重命名时,如果您想查看是否存在相同的文件名,然后附加 _01、_02,那么您必须检查是否存在具有该名称的文件,然后在末尾附加唯一编号。
于 2012-12-12T07:34:23.467 回答
0

类似的事情通常在服务器端完成。预先添加或附加代码或更改文件的全名的目的是防止上传的文件名冲突。所以想象一下在客户端做这件事?按下上传按钮时,您需要询问服务器此文件名是否已经存在,然后等待服务器的响应,然后根据响应进行重命名,然后将其发送到服务器,而不是仅将其发送到服务器然后进行检查然后重命名然后保存。

于 2012-12-12T07:07:41.490 回答