Многократная загрузка Zend File с доступом к отдельным именам файлов
Я использую Zend Framework 1.12 для некоторой системы загрузки файлов. И используя Zend_File_Transfer_Adapter_Http в форме, для загрузки двух файлов. Есть два элемента формы для этих двух файлов.
$file1 = new Zend_Form_Element_File('file1');
// other options like setLabel etc.
$this->addElement($file1, 'file1');
$file2 = new Zend_Form_Element_File('file2');
// other options like setLabel etc.
$this->addElement($file2, 'file2');
и я управляю процессом загрузки в моем контроллере следующим образом:
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
$adapter = new Zend_File_Transfer_Adapter_Http();
$adapter->setDestination($dirname);
$files = $adapter->getFileInfo();
foreach ($files as $file => $fileInfo) {
if (!$adapter->receive($file)) {
$messages = $adapter->getMessages();
echo implode("\n", $messages);
} else {
$location = $adapter->getFileName($file, true);
$filename = $adapter->getFileName($file, false);
// taking location and file names to save in database..
}
}
}
С их помощью я могу управлять загрузкой двух файлов. Но я не знаю, как определить местоположение файлов, которые загружаются с конкретным файлом Zend_Form_Element_File. Например, мне нужно знать, какой файл загружен в $file1 (элемент в форме), и я сохраню его местоположение в таблице в базе данных, а какой файл загружен в $file2 и сохраню его местоположение в другой таблице.
1 ответ
Я не люблю использовать Zend_File_Transfer_Adapter_Http. Я предпочитаю использовать такой код:
в application.ini:
data_tmp = APPLICATION_PATH "/../data/tmp"
в начальной загрузке:
$options = $this->getOptions();
define('DATA_TMP', $options['data_tmp']);
сообщить:
$elementFoo = new Zend_Form_Element_File('foo');
$elementFoo->setLabel('Upload File 1:')->setDestination(DATA_TMP);
$elementBar = new Zend_Form_Element_File('bar');
$elementBar->setLabel('Upload File 2:')->setDestination(DATA_TMP);
в контроллере:
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
$values = $form->getValues();
$filenameFoo = $values['foo'];
$filenameBar = $values['bar'];
//at this point you know the name of the individual filename
$filePathFoo = DATA_TMP . DIRECTORY_SEPARATOR . $filenameFoo;
$filePathBar = DATA_TMP . DIRECTORY_SEPARATOR . $filenameBar;
//now you have even the physical path of the files
// taking location and file names to save in database..
}
}
мои 2 цента