我正在使用带有multiple
属性的文件上传输入。 $ _FILES的输出如下:
[kadFile] => Array
(
[name] => Array
(
[0] => Txt1.txt
[1] => Doc1.docx
)
[type] => Array
(
[0] => text/plain
[1] => application/vnd.openxmlformats-officedocument.wordprocessingml.document
)
[tmp_name] => Array
(
[0] => C:\wamp\tmp\phpE515.tmp
[1] => C:\wamp\tmp\phpE525.tmp
)
[error] => Array
(
[0] => 0
[1] => 0
)
[size] => Array
(
[0] => 824
[1] => 768066
)
)
有没有办法识别这些文件,方法是通过javascript或其他任何方式给他们一个特定的名称,以便他们按照以下方式进行POST-ED:
[kadFile] => Array
(
[name] => Array
(
["kadFile_txt1"] => Txt1.txt
["kadFile_doc1"] => Doc1.docx
) ...
我需要通过在选择文件时创建动态输入字段将特定属性传递给每个文件,这些字段具有命名约定(文件输入名称+所选文件名+特定字段标识符)。在服务器级别,我需要保存每个文件并一次性添加这些额外的属性。
答案 0 :(得分:1)
AFAIK,您无法通过JavaScript更改上传的文件名。您是否考虑过使用单独的文件控件?
在JavaScript上,我想你可以在文件控件的更改事件中添加隐藏字段。
我会创建名为hdn_"fileName"
的隐藏字段,并将值设置为您要保留的值。
然后,当您开始循环$_FILES
中的文件时,您可以从$_POST
访问这些隐藏的字段值(基于当前文件名)并执行您想要的任何操作。
答案 1 :(得分:1)
如果您愿意,只要保留设置,就可以创建关联数组。然后用$new
代替$_FILES
数组,如下所示:
foreach($_FILES['kadFile']['name'] as $key => $value) {
// This is not the greatest of regex, but works for your example
preg_match('/([^\.]+).([0-9a-zA-Z]{3})/',$value,$exp);
$nKey = $exp[1];
$new['kadFile']['name']["kadFile_".$nKey] = $value;
$new['kadFile']['tmp_name']["kadFile_".$nKey] = $_FILES['kadFile']['tmp_name'][$key];
$new['kadFile']['error']["kadFile_".$nKey] = $_FILES['kadFile']['error'][$key];
$new['kadFile']['size']["kadFile_".$nKey] = $_FILES['kadFile']['size'][$key];
}
echo print_r($new);