0

我正在尝试上传视频并使用zend框架将其转换为php,但我的逻辑有点问题。

我在本地有一个目录,需要保存上传的文件:

C:/xampp/htdocs/zend/videos/

拳头我需要转换视频,然后将其移动到该目录中。

对于使用类似这样的转换即时消息:

exec("ffmpeg -i video.avi -ar 22050 -ab 32 -f flv -s 320x240 video.flv", $out);

这是我的表格的一部分:

$file = new Zend_Form_Element_File('file');
    $file->setLabel('File')
        ->setRequired(true)
        //->setDestination('/var/www/tmp') use in real life
        ->setDestination('C:/xampp/htdocs/zend/tmp')
        ->addValidator('Size',
                false,
                array('min' => '10kB', 'max' => '100MB'));

当我上传文件时,它会很好地进入该目录。

我是否需要转换tmp目录中的文件,然后将其移动到我的另一个主要文件,然后删除原始文件?

有没有办法将原始文件临时保存在临时目录中,直到它被转换然后它会自动删除自己?

我也在尝试使用,但我对过滤器和过滤器之间的区别以及是否需要使用它Zend_File_Transfer_Adapter_Http有点困惑 。setDestinationtargetRename

我家有人可以为这个问题带来一些启示,也许是一些最佳实践。

谢谢

4

1 回答 1

0

我也在尝试使用Zend_File_Transfer_Adapter_Http但我对setDestination和重命名过滤器中的目标之间的区别以及是否需要使用它有点困惑。

setDestination()已弃用,Rename应改为使用过滤器。如果您设置了Rename过滤器,它将覆盖目标。否则,差别不大。主要区别在于Rename过滤器可以重命名文件,其中setDestination将原始文件名保留在用户 PC 上,并且仅将其移动到目标位置。如果您不仔细命名它们,这可能会导致现有文件被覆盖或有人破坏其他用户的文件。

我是否需要转换tmp目录中的文件,然后将其移动到我的另一个主目录,然后删除原始文件?

就个人而言,我不会尝试在上传文件时对其进行转换。虽然在许多情况下转换可能很快,但如果上传了相对较大的视频并且需要额外 4 分钟来对视频进行编码,会发生什么情况?您不希望用户挂在那里等着想知道转换发生时发生了什么。

我会上传文件,将它们复制到一个临时位置,在那里它们将被转换,然后移动到原始位置。这当然增加了复杂性。

如果您想在上传视频时即时转换视频,我什至可能根本不会费心使用Zend_File_Transfer_Adapter_Http。相反,使用$_FILES超全局访问$_FILES['videofile']['tmp_name']ffmpeg转换该文件,然后将输出写入最终目标或临时目标,然后在转换完成时将其移动。当请求终止时,上传到 PHP 的文件会自动删除,除非您调用move_uploaded_file或手动将临时文件写入永久位置。

有没有办法将原始文件临时保存在临时目录中,直到它被转换然后它会自动删除自己?

是的,如果你没有Zend_File_Transfer. 上传的文件会自动在一个临时目录中,直到 PHP 请求终止。如果您即时进行转换,PHP 完成时会自动删除原始临时文件。

希望这可以为您解决一些问题。

于 2012-03-06T22:11:32.790 回答