1

我正在使用 Fineuploader 脚本的 jQuery 版本(版本 3.3)。

我已经创建了必要的上传脚本,一切似乎都按预期工作,但我的目标是将多个文件上传到一个文件夹,该文件夹是根据第一个文件上传时创建的数据库条目 ID 动态创建的。为此,我将文件夹/数据库条目 ID 设置为返回参数,其中包含我在脚本末尾返回的 JSON 信息,然后使用 on('complete'...) 函数,我试图将该参数设置为传递回我的 PHP 脚本,以防止我的 PHP 脚本创建新的数据库条目,从而为每个文件创建一个新文件夹。

在我的 JS 控制台中记录结果时,我发现这不起作用,因为我对 on('complete'...) 的使用似乎只在最后一个文件完成上传后设置参数。我试图查看http://docs.fineuploader.com/api/callbacks.html上详细介绍的其他回调,但没有找到一个使用我的 PHP 脚本中的 JSON 响应的回调。

有没有办法可以在第一次成功上传时设置此参数,并为特定批次文件上传中的每次后续上传保持不变?

这是我目前正在使用的 JS:

jQuery(document).ready(function(){

    var folderID;

    jQuery('#file_multi_upload').fineUploader({
        request: {
            endpoint: '/filehandler'
        },
        debug: true
    }).on('complete', function(event, id, name, responseJSON){
        window.folderID = responseJSON['folder_id'];
        var uploadedFilePath = responseJSON['filepath'];
        var oldVal = jQuery('#uploaded_files').val();

        if (oldVal != '') {
            jQuery('#uploaded_files').val(oldVal+" "+ uploadedFilePath);
        } else {
            jQuery('#uploaded_files').val(uploadedFilePath);
        }
    }).on('upload', function(event, id, filename){
        jQuery(this).fineUploader('setParams', { 'uploadFolderId': folderID });
    });
});

这是我的 PHP 上传脚本:

<?php
/*
 * Template Name: File Upload Handler
 */

global $wpdb;

$result = array(
'success' => false
);

if (!empty($_FILES) && is_array($_FILES)) :

if (!isset($_POST['uploadFolderId']) || $_POST['uploadFolderId'] !== '') :

$uploadData = array(
    'uploaded' => date('Y-m-d H:i:s')
);

$wpdb->insert('wp_fileuploads_rel', $uploadData);

$uploadDbEntryId = $wpdb->insert_id;

else :

$uploadDbEntryId = $_POST['uploadFolderId'];

endif;

$targetPath = ABSPATH.'wp-content/uploads/competition_uploads/'.$uploadDbEntryId.'/';

if (!is_dir($targetPath)) {
mkdir($targetPath);
}

foreach ($_FILES as $file) :

$filePath = $targetPath . basename( $file['name']);

if(move_uploaded_file($file['tmp_name'], $filePath)) :

    $insertData = array(
    'created' => date('Y-m-d H:i:s'),
    'filename' => $file['name'],
    'filepath' => $filePath,
    'upload_id' => $uploadDbEntryId
    );

    if ($wpdb->insert('wp_fileuploads', $insertData)) :

    $serverPath = ABSPATH;
    $siteUrl = get_site_url();

    $fileUrl = str_replace($serverPath, $siteUrl .'/', $filePath);

    $result = array(
        'success' => true,
        'filepath' => $fileUrl,
        'folder_id' => $uploadDbEntryId,
        'the_request' => $_POST
    );
    endif;
    //$wpdb->update( $table, $data, $where, $format = null, $where_format = null );

//      echo "The file ".  basename( $file['tmp_name']['name'])." has been uploaded";
endif;

endforeach;

endif;

echo json_encode($result);
?>

对此的任何帮助将不胜感激。

4

1 回答 1

-1

我没有看到一个可以让您知道批次何时完成的钩子。无论如何,如果用户忘记了一个文件并上传了另一批文件怎么办?如果我理解正确,那么您将有两个文件夹。您应该给用户一个按钮来表示“我已完成上传”。然后,您可以在发生这种情况时将文件移动到目标文件夹。

于 2013-03-20T17:53:34.493 回答