2013-04-03 1 views
3

Я ссылаюсь на http://samsonasik.wordpress.com/2012/08/31/zend-framework-2-creating-upload-form-file-validation/ и следую за этим, я могу загрузить 1 файл успешно, используя фильтр переименования в ZF2.zf2 Как загрузить файлы, более 1 файла

Однако, когда я использую этот способ для загрузки 2 файлов, он идет не так. Я вставляю свой код следующим образом:

$this->add(array(
'name' => 'bigpicture', 
'attributes' => array(
    'type' => 'file' 
    ), 
    'options' => array(
     'label' => 'Big Pic' 
    ) 
)); 
$this->add(array(
'name' => 'smallpicture', 
'attributes' => array(
    'type' => 'file' 
    ), 
'options' => array(
    'label' => 'Small Pic' 
    ) 
)); 

<div class="row"><?php echo $this->formRow($form->get('smallpicture')) ?></div> 
<div class="row"><?php echo $this->formRow($form->get('bigpicture')) ?></div> 

$data = array_merge(
    $request->getPost()->toArray(), 
    $request->getFiles()->toArray() 
); 

$form->setData($data); 
if ($form->isValid()) { 
    $product->exchangeArray($form->getData()); 
    $picid = $this->getProductTable()->saveProduct($product); 
    $pathstr = $this->md5path($picid); 
    $this->folder('public/images/product/'.$pathstr); 
    //move_uploaded_file($data['smallpicture']['tmp_name'], 'public/images/product/'.$pathstr.'/'.$picid.'_small.jpg'); 
//move_uploaded_file($data['bigpicture']['tmp_name'], 'public/images/product/'.$pathstr.'/'.$picid.'_big.jpg'); 
$fileadaptersmall = new \Zend\File\Transfer\Adapter\Http(); 
$fileadaptersmall->addFilter('File\Rename',array(
    'source' => $data['smallpicture']['tmp_name'], 
    'target' => 'public/images/product/'.$pathstr.'/'.$picid.'_small.jpg', 
    'overwrite' => true 
)); 

$fileadaptersmall->receive(); 
$fileadapterbig = new \Zend\File\Transfer\Adapter\Http(); 
$fileadapterbig->addFilter('File\Rename',array(
    'source' => $data['bigpicture']['tmp_name'], 
    'target' => 'public/images/product/'.$pathstr.'/'.$picid.'_big.jpg', 
    'overwrite' => true 
)); 
$fileadapterbig->receive(); 
} 

приведенные выше формы, вид, действие. используя этот способ, только маленькая картинка uploaed успешно. большая картина идет не так. предупреждение мелькали, как в следующем:

Внимание: move_uploaded_file (C: \ WINDOWS \ TMP \ small.jpg): не удалось открыть поток: недопустимый аргумент в E: \ MyProject \ поставщика \ ZendFramework \ ZendFramework \ библиотека \ Зенд \ файл \ перенос \ адаптер \ http.php на линии 173

Предупреждение: move_uploaded_file(): Не удается переместить 'C: \ WINDOWS \ TMP \ php76.tmp' в «C: \ WINDOWS \ TEMP \ big.jpg 'в E: \ myproject \ vendor \ zendframework \ zendframework \ library \ zend \ file \ transfer \ adapter \ http.php в строке 173

Кто может сказать мне, как загрузить более 1 файла таким образом. вы знаете, способ переименования, аналогичный описанному выше. Благодарю.

ответ

2

Я столкнулся с той же проблемой с сайтом, который я сделал. Решение состояло в том, чтобы сделать переименование в самом контроллере, получив все изображения, а затем перешагнув их.

if ($file->isUploaded()) { 
      $pInfo = pathinfo($file->getFileName()); 
      $time = uniqid(); 
      $newName = $pName . '-' . $type . '-' . $time . '.' . $pInfo['extension']; 
      $file->addFilter('Rename', array('target' => $newName)); 
      $file->receive(); 
     } 

Надеюсь, это поможет вам в правильном направлении.

+0

Спасибо Stephan Grobler! Извините, я до сих пор не знаю, как его улучшить. Я добавляю if ($ fileadaptersmall-> isUploaded()) и if ($ fileadapterbig-> isUploaded()) вне $ fileadatpersmall/big -> receive(); все же, только маленькая фотография загружена. –

0

Я столкнулся с той же проблемой, и мне удалось заставить ее работать, используя приведенный ниже код;

$folder = 'YOUR DIR';   
$adapter = new \Zend\File\Transfer\Adapter\Http(); 
$adapter->setDestination($folder); 
foreach ($adapter->getFileInfo() as $info) { 
    $originalFileName = $info['name']; 
    if ($adapter->receive($originalFileName)) {   
     $newFilePath = $folder . '/' . $newFileName; 
     $adapter->addFilter('Rename', array('target' => $newFilePath, 
      'overwrite' => true)); 
    } 
} 
Смежные вопросы