通过添加后缀重命名文件

时间:2012-12-12 06:29:23

标签: php javascript jquery html forms

我可以更改文件的名称,例如图像的名称如'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

upload.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;

    }




}

2 个答案:

答案 0 :(得分:4)

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

  1. 用户选择文件并点击上传
  2. 服务器从临时文件夹中取出文件 - 检查MimeType,调整大小并重命名文件,并将其存储到文件服务器上所需的位置。
  3. 重命名时,如果要查看是否存在相同的文件名,然后附加_01,_02,则必须检查文件是否存在该名称,然后在末尾附加唯一编号。

答案 1 :(得分:0)

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