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_[ファイル名].jpg にする必要があります。複雑になる可能性があるため、サーバー側でこれを実行したくありません。

編集: Upload.php は、ファイル内のものをアップロードする私の php ファイルです。だから、それは私にとって挑戦でした。ファイル名は変更できますが、3 回のアップロードすべてで変更されます。たとえば、着信ファイル名に「_」を追加します。次に、すべてのファイル名に変更されます。とにかくクライアント側から?

私のアップロードスクリプト: 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 に答える