我在一个页面上有多个输入字段。每个输入字段都有文本输入和文件上载字段。当前的工作流程如下所示:
现在我需要一种方法来跟踪哪个文件上传对应于哪个文本输入。如果我有文件上传字段的id,我可以与相应的文本输入建立关系,并与数据库中返回的id一起,我可以将文本存储到相应的上传。
我尝试了here描述的方式,但onSelect
只有一个file
对象,无法向我提供名为Uploadify的输入字段的数据。我没有找到另一个功能,它在实际版本的Uploadify中为我提供了这个功能。
现在我正在考虑使用$_SESSION
,但不知道如何做到这一点。
客户端:
$('.iconupload').uploadify({
'swf' : '<?php echo SUBFOLDER; ?>/swf/uploadify.swf',
'uploader' : '<?php echo SUBFOLDER; ?>/includes/uploadify.php',
'formData' : {'folder' : '<?php echo IMG_UPLOAD_ICONS; ?>', 'id' : '<?php echo $_SESSION['ID']; ?>', 'type' : 'icon'},
'multi' : false,
'auto' : true,
'removeCompleted': false,
'queueSizeLimit' : 1,
'simUploadLimit' : 1,
'fileTypeExts' : '*.jpg; *.jpeg; *.png; *.gif',
'fileTypeDesc' : 'JPG Image Files (*.jpg); JPEG Image Files (*.jpeg); PNG Image Files (*.png), GIF (*.gif)',
'onUploadError' : function(file, errorCode, errorMsg, errorString) {
alert('The file ' + file.name + ' could not be uploaded: ' + errorString);
},
'onUploadSuccess': function(file, data, response) {
//alert('The file ' + file.name + ' was successfully uploaded with a response of ' + response + ':' + data);
},
'onSelect' : function(file) {
//var elem_id = $(event.target).attr("id"); //here you get the id of the object.
//alert (elem_id);
console.debug(file);
//$("#"+elem_id).uploadifySettings('formData',{'formID':elem_id})
}
});
服务器侧:
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
$targetFile = rtrim($targetPath,'/') . '/' . $_FILES['Filedata']['name'];
$res= mkdir(str_replace('//','/',$targetPath), 0750, true);
$res2=move_uploaded_file($tempFile,$targetFile);
$relative_url = str_replace($_SERVER['DOCUMENT_ROOT'],'',$targetFile);
echo $relative_url;
if($_REQUEST['type'] == 'icon' && !empty($_REQUEST['id'])){
$iconid = $db->addIcon($_REQUEST['id'], $relative_url);
$icons = array();
if(isset($_SESSION['icons'])){
$icons = $_SESSION['icons'];
}
$icons[$_REQUEST['formID']]= $iconid;
$_SESSION['icons'] = $icons;
}
}
也许可以使用onUploadSuccess
和data
对象,可以在uploadify.php
中返回并使用一些Javascript魔法。但我仍然不知道从哪个输入字段中调用了上载...
答案 0 :(得分:1)
您可以使用jQuery .each()
设置uploadify。这将允许您设置要通过formData传递的ID,如下所示:
$('.iconupload').each(function() {
var $iconUpload = $(this);
$iconUpload.uploadify({
'swf' : '<?php echo SUBFOLDER; ?>/swf/uploadify.swf',
'uploader' : '<?php echo SUBFOLDER; ?>/includes/uploadify.php',
'formData' : {'folder' : '<?php echo IMG_UPLOAD_ICONS; ?>', 'id' : '<?php echo $_SESSION['ID']; ?>', 'type' : 'icon', 'uploadId': $iconUpload.attr("id")},
'multi' : false,
'auto' : true,
'removeCompleted': false,
'queueSizeLimit' : 1,
'simUploadLimit' : 1,
'fileTypeExts' : '*.jpg; *.jpeg; *.png; *.gif',
'fileTypeDesc' : 'JPG Image Files (*.jpg); JPEG Image Files (*.jpeg); PNG Image Files (*.png), GIF (*.gif)',
'onUploadError' : function(file, errorCode, errorMsg, errorString) {
alert('The file ' + file.name + ' could not be uploaded: ' + errorString);
},
'onUploadSuccess': function(file, data, response) {
//alert('The file ' + file.name + ' was successfully uploaded with a response of ' + response + ':' + data);
}
}
});
如果您不想在uploadify.php中保存数据,可以将其保存在onUploadSuccess
中,如下所示:
'onUploadSuccess': function(file, data, response) {
saveIconData($(iconUpload.attr("id"), file.name);
}
function saveIconData(id, fileName) {
// Save via ajax
}
要通过ajax保存数据,可以使用jQuery的$.ajax()
方法。你可以设置像这样的ajax调用:
$.ajax({
url: "urlToPhpFile.php",
data: { iconID: value, iconFileName: value },
success: function(result) {
// do something on success of save
}
});