在symfony2网站上集成PhpTus

时间:2017-03-03 16:16:49

标签: symfony file-upload upload

我尝试使用Tus.IO,但调试起来很复杂。

http://tus.io/

我会在我的网站中使用Symfony2.8 / Apache2.4 / PHP5.6在FPM模式下整合php-tus服务器。

  1. 这是我的apache vhost(我的网站不在root上,但在/ upload子文件夹中):

    <VirtualHost *:80>
       ServerAdmin webmaster@localhost
    
       #  DocumentRoot /var/www/hebergementbcdi_upload/web
       Alias /upload /var/www/hebergementbcdi_upload/web
    
       <Directory "/var/www/hebergementbcdi_upload/web">
          <IfModule mod_proxy_fcgi.c>
           <Files ~ (\.php$)> 
              SetHandler "proxy:fcgi://127.0.0.1:9000"
            </Files>
          </IfModule>
    
           Header set Access-Control-Allow-Origin http://10.133.169.137
           Header set Access-Control-Allow-Headers "Authorization"
    
           AllowOverride All
           Allow from All
    
           Options -Includes -ExecCGI
       </Directory>
    </VirtualHost>
    
  2. 我已经通过composer在供应商文件夹中部署了PhpTus。

  3. 我已经配置了routing.yml,如下所示

    upload_tus_io: 路径:/ hebergeurs / V1 / upload_tus 默认值:{_ control:UploadBcdiBundle:Upload:uploadTusIO}

  4. 我已经创建了这样的控制器

     * Url : /hebergeurs/V1/upload_tus
     *
     * @param       Symfony\Component\HttpFoundation\Request                $request                        Requête http en cours.
     *
     * @return      Symfony\Component\HttpFoundation\Response               $response                       Réponse http au format JSON
     */
     public function uploadTusIOAction(Request $request) {
    
            $upload_data_path =  $this->getParameter('upload_data_path');
    
            // Create and configure server
            $server = new \PhpTus\Server($upload_data_path,
                                                                    '/hebergeurs/V1/upload_tus',
                                                                    array('prefix' => 'php-tus')
           );
    
            // Run server
            $response = $server->process(true);
    }
    
  5. 在客户端上,我使用tus-upload(Python客户端),如下所示:

    tus-upload DATA.zip http://10.133.169.138/upload/hebergeurs/V1/upload_tus --chunk-size 256000 --header Authorization&#39; foo&#39;

    但我有这个错误:

      

    [2017-03-03 16:50:00,551] INFO创建文件端点Traceback(大多数   最近的呼叫最后):文件&#34; / usr / local / bin / tus-upload&#34;,第11行,in          load_entry_point(&#39; tus.py == 1.2.0&#39;,&#39; console_scripts&#39;,&#39; tus-upload&#39;)()文件   &#34; /usr/local/lib/python2.7/dist-packages/tus.py" ;,第83行,在   _cmd_upload       metadata = args.metadata)File&#34; /usr/local/lib/python2.7/dist-packages/tus.py" ;,第162行,在创建       引发TusError(&#34;创建失败:%s&#34;%响应)tus.TusError:创建失败:

    你有没有想法。

    最好的问候。

1 个答案:

答案 0 :(得分:0)

最后,我在没有创建.htaccess文件来重定向请求的情况下解决了我的问题。

我在routing.yml:

中进行了类似的处理
# Upload with TUS.io
upload_tus_io:
    path:   /hebergeurs/V1/upload_tus/files/{upload_filename}
    defaults: { _controller: UploadBcdiBundle:Upload:uploadTusIO }
    methods:  ['POST','PATCH']
    requirements:
        upload_filename: "[a-z0-9]*"

然后我使用了PHP TUS.io客户端,因为Python客户端不能与PHP Backend一起使用。

require_once __DIR__ . '/php-tus/src/PhpTus/Client.php';
require_once __DIR__ . '/php-tus/src/PhpTus/Exception/Abort.php';
require_once __DIR__ . '/php-tus/src/PhpTus/Exception/BadHeader.php';
require_once __DIR__ . '/php-tus/src/PhpTus/Exception/Curl.php';
require_once __DIR__ . '/php-tus/src/PhpTus/Exception/File.php';
require_once __DIR__ . '/php-tus/src/PhpTus/Exception/Max.php';
require_once __DIR__ . '/php-tus/src/PhpTus/Exception/Request.php';
require_once __DIR__ . '/php-tus/src/PhpTus/Exception/Required.php';

$filename = '/home/admin/DATA.zip';
$endpoint = 'https://<my_ip>/upload/hebergeurs/V1/upload_tus/files/';

$client = new PhpTus\Client();
$client->setFilename($filename);
$client->setEndPoint($endpoint);
$client->upload();

不要忘记攻击Client.php接受自签名的证明:

// Disable SSL vérification
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, 0);

谢谢我。