5

PHP サイトで jQuery File Upload プラグインを使用しています。

ファイルをすべて同じアップロード フォルダーに入れるのではなく、動的に名前を付けたサブフォルダーにアップロードすることが可能かどうか疑問に思っていました。

その理由は、サイトでユーザーが作成する「プロジェクト」ごとにアップロードされたファイル用に個別のフォルダーが必要だからです。たとえば、ユーザーがプロジェクトを作成すると、そのプロジェクトにアップロードするすべてのものが /uploads/{$project_uid}/{$file_name} に移動します

私は自分自身を適切に説明したことを願っています。誰かがここで私を助けてくれれば本当に感謝しています.

ありがとう!

4

1 に答える 1

3

最初に、明白なことを述べておく必要があります。明らかなセキュリティ上の理由から、JavaScript/jQuery/jWhateverPlugin を使用して (つまり、クライアント側から) アップロード先を実際に設定することはできません。

ただし、アップロードの実際のストレージを管理するために情報を使用するサーバー側エンジン (この場合は PHP) に情報を渡すことができます。

あなたが最初に始めた blueimp の jQuery File Upload やBenno最初に宣伝して要件を満たしているように見えたUploadify など、さまざまなツールキットが役立ちます。

そのため、クライアント サイズとサーバー側の両方のスクリプトをカスタマイズして、ディレクトリ変数を渡し、それらを使用して格納場所を定義するように実装する必要があります。

Uploadify のドキュメントに大きく基づいており、project_uid変数を使用すると、次のようになります。

クライアント側 (JavaScript + jQuery + Uploadify):

var project_uid;
// populate project_uid according to your needs and implementation
// befor using uploadify

$('#file_upload').uploadify({
    'method'   : 'post',

    // pass your variable to the server
    'formData' : { 'project_uid' : project_uid },

    // optional "on success" callback
    'onUploadSuccess' : function(file, data, response) { 
        alert('The file was saved to: ' + data);
    }
});

サーバー側 (PHP + Uploadify):

// Set $someVar to 'someValue'
$untrustedProjectUid = $_POST['project_uid'];

// Remember to check heavily the untrusted received variable.
// Let's pretend you checked it, it passe your tests, so you
// initialized a trusted var with it
$trustedProjectUid = ensureSecure( $untrustedProjectUid );

$targetFolder = '/uploads/' . $trustedProjectUid . '/' ; // Relative to the root


if (!empty($_FILES)) {
    $tempFile = $_FILES['Filedata']['tmp_name'];
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder;
    $targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];

    // Validate the file type
    $fileTypes = array('jpg','jpeg','gif','png'); // Put you allowed file extensions here
    $fileParts = pathinfo($_FILES['Filedata']['name']);

    if (in_array($fileParts['extension'],$fileTypes)) {
        move_uploaded_file($tempFile,$targetFile);
        echo $targetFolder . '/' . $_FILES['Filedata']['name'];
    } else {
        echo 'Invalid file type.';
    }
} 
于 2012-06-18T10:43:09.053 に答える