0

ValumのAjax-Uploaderスクリプトを使用して、サーバーにファイルをアップロードしています。アップロードされたファイルが同じ名前である可能性が高いため、ファイル名に乱数を追加します。問題は、ajaxアップローダーがinput[type=text]、乱数が追加された新しいファイル名ではなく、元のファイル名を返すことです。echo $file;の代わりに試しましecho "success";たが、ファイルがアップロードされ、スクリプトがポップアップエラーで返されます。

jQuery(function() {
    var url = "http://example.com/uploads/samples/";
    var button = jQuery('#up');
    new AjaxUpload(button, {
        action: 'upload.php',
        name: 'upload',
        autoSubmit: true,
        onSubmit: function(file, ext) {
            // do stuff while file is uploading
        },
        onComplete: function(file, response) {
            if (response === "success") {
                $('input[type=text]').val(url + file);
            } else {
                jAlert('Something went wrong!', 'Error!');
            }
        }
    });
});

upload.php

<?php
    $uploaddir = '/path/to/uploaddir/'; 
    $file = basename($_FILES['file']['name']);

     if($_FILES['file']['name']) {
      $file = preg_replace('/\s+/', '_', $file);
      $rand = rand(0000,9999);

      if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $rand . $file)) { 
            echo "success";
        } else {
            echo "error";
        }
    }
?>
4

3 に答える 3

1

変化する

$('input[type=text]').text(url + file);

$('input[type=text]').val(url + file);
于 2012-10-11T19:19:28.480 に答える
0

クライアント コードとサーバー コードは、互いに完全に独立して存在します。基本的に、JavaScript コードは PHP コードが何をしたかを知る方法がありません。urlPHP ファイルで変更しても、自動的に更新されません。

別の解決策は、PHP コードに新しいファイル名をエコーするか、エラー メッセージをエコーすることです。

例えば:

PHP

<?php
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $rand . $file)) {   
    // Everything went well! Echo the dollar sign ($) plus the new file name
    echo '$' . $_FILES['file']['tmp_name'], $uploaddir . $rand . $file;   
} else {  
    echo "error";  
}  
?>

JS

onComplete: function(file, response) { 
    // If the first character of the response is the "$" sign
    if (response.substring(0,1) == "$") { 
        $('input[type=text]').val(response.substring(1));
    } else { 
        jAlert('Something went wrong!', 'Error!'); 
    } 
} 
于 2012-10-11T20:03:03.867 に答える
0

日付と時刻を使用して一意の乱数を作成することをお勧めします。コードで次の関数を使用できます。プロジェクトで既に使用しているため、この関数を完全に信頼しています。

`
    /**
    * この関数は一意の文字列をキーとして返します
    */
    public static function getUniqueKey(){      
        $currentDateTime = date("YmdHisu");
        $currentDateTime を返します。BTITTools::createRandomString(3);
    }
`

@マイコード プログラム

于 2012-10-11T19:27:01.473 に答える