【问题标题】:How can send I session data in the Blueimp jquery file uploader?如何在 Blueimp jquery 文件上传器中发送会话数据?
【发布时间】:2012-08-18 20:10:33
【问题描述】:

我正在尝试将 codeigniter 和 Blueimp Jquery File Upload 插件用于我目前正在处理的项目:根据经过身份验证的用户过滤图像以进行显示。我需要能够根据包含插件的页面上的 GET 变量来更改上传的路径。我希望它为每个用户连接到一个单独的文件夹。

为此,我相信我只需要再完成一个步骤:在 $_request、$_POST 或$_GET 数组设置。

从谷歌搜索看来,Jquery File Upload plugin: Dynamically change upload path? 正是我想要做的。

唯一的问题是最后一步没有解释!我是 JS、Jquery 和 ajax 的新手。有人可以解释如何使用 jquery 使会话 ID 在 php 脚本中可用。

作为提示,blueimp 作者在https://github.com/blueimp/jQuery-File-Upload/issues/241 中写了以下内容

看看 example/application.js,第二部分注释为 // 加载现有文件: 在那里,添加 + '?ext=VAR1&nota=VAR2' 在后面 $('#file_upload').fileUploadUIX('option', 'url') 并将 VAR1 和 VAR2 调整为所需的路径变量。

当前main.js文件中的代码是

$('#fileupload').each(function () {
        var that = this;
        $.getJSON(this.action, function (result) {
            if (result && result.length) {
                $(that).fileupload('option', 'done')
                    .call(that, null, {result: result});
            }
        });
    });

谢谢,

比尔

【问题讨论】:

  • 您确定需要将会话 ID 作为查询字符串的一部分放入吗?您的会话 ID 应作为 cookie 发送给用户,然后自动备份上传。如果你需要一些特别的东西,你可以在 $_SESSION 中第一次显示页面之前设置它。当您尝试解析文件时,它应该再次可用。此时,您可以将其移动到您需要的位置,而不是使其转到上传 javascript 中的其他文件夹。这有意义吗?
  • 您好,mcarpenter,感谢您的 cmets。只是为了我的理解,如果我将会话 ID 存储在 cookie 中,服务器端和客户端都可以使用它吗?据我所知,作者建议通过将会话 ID 附加到 jquery 中的查询字符串上来处理它(请参阅上面的代码)
  • 是的,它不应该被要求单独传递,并且你的会话 id 应该已经是一个 cookie,除非 codeigniter 对其会话做了一些时髦的事情。我自己使用 blueimp 代码,我不担心发送任何额外的会话信息。我将在下面发布我的示例作为答案。

标签: javascript jquery codeigniter blueimp


【解决方案1】:

这是我用来运行 blueimp 上传并在生产站点上运行的一段代码。如您所见,我根本不关心附加任何会话数据。我只是告诉它要上传到的 url,然后在它工作时调用一些回调方法。我要在这里添加的一个警告是,我只使用我自己设计的基本插件。

$("#file").fileupload({
        dataType: 'json',
        url: "/Upload/Photo"
        start: function () {
            progress.show();
        },
        progress: function (e, data) {
            progress.progressbar({ value: (data.loaded / data.total) * 100 });
        },
        done: function (e, data) {
            progress.hide();
        },
        fail: function (e, data) {
            progress.hide();
            var message = "An error was encountered!";

            // Use the simplemodal plugin to show my error
            modal.showError(message);
        }
    });

【讨论】:

  • 您好,木匠。我终于使用您最初使用 codeigniter 会话 cookie 的想法让它工作了。部分问题是 blueimp 插件在我的设置中不是“内部”codeigniter,因此标准的 codeigniter 函数在这种情况下不起作用。意识到这一点后,我能够替换通用 php 并使其正常工作。感谢您的帮助和您的 jquery 示例。我现在对 Ajax 的了解很少。问候 - 比尔
猜你喜欢
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-13
  • 2012-07-15
相关资源
最近更新 更多