gpt4 book ai didi

php - Zend框架中的多图片上传,如何?

转载 作者:行者123 更新时间:2023-12-04 05:52:23 26 4
gpt4 key购买 nike

我在将多个文件上传到磁盘时遇到问题。这是我的代码。

我有一个发送到上传功能的 2 张图片的请求。这 2 张图片位于一个名为 $multiUpload 的变量中

$folderPath = '/var/www/';
if (is_array($multiUpload)){
$file = array();
$filename = array();

foreach($multiUpload as $key=>$val){
// get the file extension
$file[] = explode('.',$val);

// create custom file name
$filename[] = time().'.'.$file[$key][1];

//send to the upload function
$this->uploadToDisk($folderPath, $filename[$key]);

// sleep 1 sec so that the pic names will be different
sleep(1);
}
return $filename;

}


public function uploadToDisk($folderPath, $filename)
{

$adapter = new Zend_File_Transfer_Adapter_Http();
$adapter->setDestination($folderPath);
$adapter->addFilter( 'Rename',array(
'target' => $folderPath."/".$filename,
'overwrite' => true
) );
if ($adapter->receive()) {
$message = "success";
} else {
$message = "fail";
}

return $message;
}

这将返回
Array
(
[0] => Array
(
[0] => 1332977938.jpg
[1] => 1332977939.jpg
)

)

但只有 array[0][0] or 1332977938.jpg实际上会保存到磁盘。

为什么他们现在都得救了?有线

有任何想法吗?

最佳答案

我怀疑第二次调用 uploadToDisk正在返回 fail因为你只能调用Zend_File_Transfer_Adapter_Http::receive()每个文件一次。由于调用 receive 时没有指定文件,它会在您第一次调用 uploadToDisk 时接收所有文件随后以 File Upload Attack 失败错误。

这是您可以尝试的一些代码。这会尝试单独接收每个文件,然后在每次调用 uploadToDisk 时一次保存一个文件。 .

关于代码的几点说明:

  • uploadToDisk 的第一个参数($val) 可能需要更改,因为我不确定原始值是什么。它应该对应于用于文件上传的元素名称之一(参见 Zend_File_Transfer_Adapter_Http::getFileInfo() )以获取文件列表。
  • 我更改了生成唯一文件名的方法,因此您不必 sleep(1)
  • Zend_File_Transfer_Adapter_Abstract::setDestination()已弃用并将在 future 消失。相反,只需使用 Rename筛选。使用 Rename 时, setDestination()没有效果。

  • 在这里...
    <?php

    $folderPath = '/var/www/';

    if (is_array($multiUpload)){
    $filenames = array();

    foreach($multiUpload as $key => $val){
    // get the file extension
    $ext = explode('.', $val);
    $ext = $ext[sizeof($ext) - 1];

    // create custom file name
    do {
    $filename = uniqid(time()) . '.' . $ext;
    $diskPath = $folderPath . $filename;
    } while (file_exists($diskPath));

    $filenames[$key] = $filename;

    //send to the upload function
    // $val is the file to receive, $diskPath is where it will be moved to
    $this->uploadToDisk($val, $diskPath);
    }

    return $filename;
    }


    public function uploadToDisk($file, $filename)
    {
    // create the transfer adapter
    // note that setDestination is deprecated, instead use the Rename filter
    $adapter = new Zend_File_Transfer_Adapter_Http();
    $adapter->addFilter('Rename', array(
    'target' => $filename,
    'overwrite' => true
    ));

    // try to receive one file
    if ($adapter->receive($file)) {
    $message = "success";
    } else {
    $message = "fail";
    }

    return $message;
    }

    关于php - Zend框架中的多图片上传,如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9917188/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com