如何使用 PLupload 发送附加数据?

Posted

技术标签:

【中文标题】如何使用 PLupload 发送附加数据?【英文标题】:How to send additional data using PLupload? 【发布时间】:2012-03-21 02:01:04 【问题描述】:

我正在使用plupload 进行 ajax 文件上传。 现在 plupload.Uploader 类有很多选项,但没有一个是附加数据。

例如:

var uploader = new plupload.Uploader(
    runtimes : 'gears,html5,flash,silverlight,browserplus',
    browse_button : 'pickfiles',
    container : 'contact_container',
    max_file_size : '10mb',
    url : 'upload.php',
    flash_swf_url : '/plupload/js/plupload.flash.swf',
    silverlight_xap_url : '/plupload/js/plupload.silverlight.xap',
    filters : [
        title : "Image files", extensions : "jpg,gif,png",
        title : "Zip files", extensions : "zip"
    ],
    resize : width : 320, height : 240, quality : 90
);

我想要实现的是我的服务器中有一个文件夹,所有上传的内容都在其中 正在被拯救。 我需要在文件夹内为每个已上传文件的用户创建一个子文件夹。 如何将用户 ID 等数据添加到 plupload.Uploader 的实例中? 或者,如果我在容器 div 中包装一个表单,我能在 $_REQUEST 中看到它吗? 或者有其他方法可以实现吗?

【问题讨论】:

【参考方案1】:

您是否尝试过使用 multipart_params 的设置?像这样向您的 plupload.Uploader 添加一个附加选项:

var uploader = new plupload.Uploader(
    runtimes : 'gears,html5,flash,silverlight,browserplus',
    browse_button : 'pickfiles',
    container : 'contact_container',
    max_file_size : '10mb',
    url : 'upload.php',
    flash_swf_url : '/plupload/js/plupload.flash.swf',
    silverlight_xap_url : '/plupload/js/plupload.silverlight.xap',
    filters : [
        title : "Image files", extensions : "jpg,gif,png",
        title : "Zip files", extensions : "zip"
    ],
    resize : width : 320, height : 240, quality : 90,
    multipart_params : 
        "name1" : "value1",
        "name2" : "value2"
    
);

然后您需要处理处理上传的文件中的值(默认为upload.php)。我认为这些值是由$_POST 捕获的,但您可以使用$_REQUEST 来确定。

我使用 jQuery 动态分配值,因此您可以使用 "name1" : $("#name1").val(), 之类的东西来代替 "name1" : "value1",其中 #name1 可能是页面其他位置的输入。

对于其中一些设置,Plupload 的文档有点稀疏。

【讨论】:

对我来说,“即时”意味着在活动期间(就在uploader.start()之前),我设置了uploader.settings.multipart_params["name1"] = calcValue() 关于将参数存储在队列中的好文章。 bennadel.com/blog/… 你需要双引号吗?即是"name1" 还是name1 @hentrywright - 对于简单的字符串没有区别 :) 这很好,在极少数情况下,您在定义和初始化上传对象的早期阶段就知道您的帖子参数的值。但通常,它们可能来自其他表单输入。【参考方案2】:

您可以使用uploader.settings.multipart_params["name1"] = yourValue;,但"name1" 必须在上传器配置中声明:

multipart_params : 
    "name1" : "value1",
    "name2" : "value2"

【讨论】:

干得好。能够监听 BeforeUpload 和查询表单值并将它们附加到先前声明的 mulitpart_params。我已确认此方法有效且效果很好。【参考方案3】:

如果您需要在每个文件上传时动态添加参数,您可以这样做:

uploader.bind('BeforeUpload', function(up, file) 
    up.settings.multipart_params = 

        "parameter1": "value1",
        "paremeter2": "value2"

    ;
);

【讨论】:

【参考方案4】:

你也可以使用

uploader.settings.url = "upload.php?param1=whatever"

并将其作为 get 变量传递。

【讨论】:

以上是关于如何使用 PLupload 发送附加数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用附加数据将 apns 令牌发送到服务器

plupload如何删除一条数据

如何向 javascript 的 fetch() 函数发送附加数据

如何将带有附加数据的 FormData 文件发送到 asp.net web api ajax 调用

使用 plupload 和 Rails 3 的 Amazon S3 分段上传

使用uuencode,如何重命名发送时附加的文件?