如何使用zend框架设置上传文件的路径?

时间:2012-03-06 21:20:49

标签: php zend-framework file-upload zend-file

我正在尝试上传视频并使用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,但有点混淆setDestination和来自target过滤器的Rename之间的差异,如果有的话需要使用它。

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

由于

1 个答案:

答案 0 :(得分: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完成时会自动删除原始临时文件。

希望能为你解决一些问题。