Uploadify JQuery & PHP/MySQL - 上传时更改文件名

Posted

技术标签:

【中文标题】Uploadify JQuery & PHP/MySQL - 上传时更改文件名【英文标题】:Uploadify JQuery & PHP/MySQL - Change file name on upload 【发布时间】:2011-06-09 01:03:08 【问题描述】:

我将 Uploadify 用作表单的一部分。让我给你一些背景,它可能会有所帮助。我有一个表单,用户可以在其中向网站添加“项目”。首先,他们输入项目名称和描述。提交时,这会更新一个名为“project”的 php/mysql 数据库表并获得一个 ID。

然后用户可以将文件上传到服务器上的某个位置。我希望在上传开始之前将项目名称添加到文件名的开头和项目ID(我需要添加到数据库中),然后在上传完成后将文件详细信息添加到数据库表“图像” -通过项目 ID 链接到“项目”。

我知道我经常来回弹跳,我需要知道如何做到这一点。要更新的两个数据库表,一个在表单提交上,一个在文件上传上。我需要将项目名称和 ID 传递给 uploadify 上传脚本。

解决方案:

我必须使用下面的 uploadify 方法将项目 ID 发送到 uploadify 脚本,之前用 mysql_insert_id 结果填充变量 pid

'onSelectOnce': function(event,data) 
     $('#file_upload').uploadifySettings('scriptData', 'pid': pid);
 

然后我可以使用简单的帖子在 PHP uploadify 脚本中接收 pid 变量:

$pid = $_POST['pid'];

然后在此脚本中运行一个选择以获取我需要的数据库数据(项目别名)并在上传之前将其添加到文件名中:

    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/' . $alias . '-';
    $targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

希望这对未来的人们有所帮助。

【问题讨论】:

【参考方案1】:

在uploadify 脚本中,有一部分给出了由上传表单处理的文件的语法。我手头没有脚本,但上传了一个 onbefore complete 回调和一个 on complete 回调功能。

使用 before complete 并将名称附加到将其保存到数据库的 ajax 请求中,从那里执行 2 个查询,上传图像的名称并将 user_id 设置为可能来自您会话的用户的 ID .

   var = file_before_upload_name: filename // here use the sytax that Uploadify uses to capture the name of the file
   var = file_after_upload_name: filename // here use the sytax that Uploadify uses to capture the name of the file

然后在完成后回调中使用 ajax 请求并设置

uid : uid //来自会话 之前:file_before_upload_name, 之后:file_after_upload_name

在 ajax 中你的查询看起来像

mysql_queries("INSERT INTO `tbl-projects` SET `user_id` = $_POST['uid'], `file` = $_POST['after']");

//another query here to set the data to your other table that relates to tbl-projects

【讨论】:

永远不要在这样的查询中插入$_POST 字段。您刚刚创建了一个 SQL 注入错误。最好在所有输入上使用 mysql_real_escape_string,或者使用现有的数据库 API 将值“绑定”到 SQL 字符串。 这是一个如何去做的例子,我相信他知道他应该在更新到数据库之前清理他的数据=P 没关系,我不会让我的网站受到攻击,这是我需要的代码设置原理,个别语法很好:)【参考方案2】:

我必须使用下面的 uploadify 方法将项目 ID 发送到 uploadify 脚本,之前用 mysql_insert_id 结果填充了变量 pid:

'onSelectOnce': function(event,data) 
     $('#file_upload').uploadifySettings('scriptData', 'pid': pid);
 

然后我可以使用一个简单的帖子在 PHP uploadify 脚本中接收 pid 变量:

$pid = $_POST['pid'];

然后在此脚本中运行一个选择以获取我需要的数据库数据(项目别名)并在上传之前将其添加到文件名中:

$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/' . $alias . '-';
$targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];

希望这对未来的人们有所帮助。

【讨论】:

我使用这个插件和一个 php 上传的类。在 google 中搜索 upload.class.php。我让 PHP 处理文件名并将我的文件上传到我的服务器。然后我可以发送新名称,或者我可以使用脚本即时重命名,以便 JS 将其拾取并使用回调函数输出我想要的任何内容 @ravz 那么您的代码中必须有其他内容。我将其发布为我自己问题的解决方案,因为这是我用来让它工作的解决方案。这已经快一年了,我已经将它用于许多项目,所以我从经验中知道它有效。也许提出一个新问题并发布您的一些代码,以便我们直接为您提供帮助。【参考方案3】:

试试这个 http://programmintalk.blogspot.com/2011/02/jquery-uploadify-rename-uploaded-file.html

【讨论】:

您传递图像名称 uploadify.php?=imagename 的方式不起作用。如果您传递任何变量,您需要在我上面的答案中使用 scriptData 方法。除此之外,我们的方法是一样的 它不是“uploadify.php?=imagename”,应该是“uploadify.php?image=imagename”。试试我的例子,它对我有用,而且很简单

以上是关于Uploadify JQuery & PHP/MySQL - 上传时更改文件名的主要内容,如果未能解决你的问题,请参考以下文章

jquery上传插件Jquery.uploadify.js-转

jQuery上传插件Uploadify使用详解(3.2.1)(转载)

将 Uploadify 与 Sharepoint 和 .net 一起使用

jQuery上传插件Uploadify使用详解(转发原作者冯威)

jQuery.uploadify文件上传组件实例讲解

记录-Jquery uploadify文件上传实例