2016-09-27 15 views
0

symfony RESTの新機能です。私たちのプロジェクトでは、ng-uploadを使って画像をアップロードしています。以下はそれを担当するコードです。 UnitController.phpng-flow 404エラーを投げる

public function getUnitPhotoAction(Request $request, $id) 
{ 
    $unit = $this->getOr404($id); 

    $response = new Response(); 

    if ($unit && $unit->getPhoto()) { 
     $response->headers->set('Cache-Control', 'private'); 
     $response->headers->set('Content-type', 'image/jpeg'); 
     $response->headers->set('X-Accel-Redirect', '/unit-photos/'.$unit->getPhoto()); 

    } else { 
     $response->setStatusCode(404); 
    } 

    return $response; 
} 

public function getUnitPhotosAction(Request $request, $id) 
{ 
    $this->getOr404($id); 

    $flowJsHelper = $this->get('isf.flow_js_helper'); 

    if ($flowJsHelper->checkChunk()) { 
     return new JsonResponse(null, 200); 
    } else { 
     return new JsonResponse(null, 404); 
    } 
} 
public function postUnitPhotoAction(Request $request, $id) 
{ 
    $unit = $this->getOr404($id); 

    $flowJsHelper = $this->get('isf.flow_js_helper'); 
    $flowJsHelper->saveChunk(); 

    $data = [ 
     'success' => true, 
    ]; 

    $unitPhotoPath = $this->container->getParameter('kernel.root_dir').'/../web/uploads/unit-photos'; 
    $fileName = $unit->getId().'.jpg'; 

    if ($flowJsHelper->validateFile() && $flowJsHelper->save($unitPhotoPath.'/'.$fileName)) { 
     $data['finished'] = true; 
     $unit->setPhoto($fileName); 
     $this->getHandler()->persist($unit, false); 
    } 

    return new JsonResponse($data); 
} 

//FlowJSHelper.php

- コントローラ(フロントエンド)

$scope.getFlowJsTarget = function() { 
    return Routing.generate('api_1_post_unit_photo', {id: $scope.unit.id}); 
}; 

$scope.getFlowJsHeaders = function() { 
    return {'X-XSRF-TOKEN': $cookies['XSRF-TOKEN']}; 
}; 

$scope.getUnitPhotoUrl = function(unit) { 
    return Routing.generate('api_1_get_unit_photo', {id: unit.id}); 
}; 

//バックエンドコードで

// HTML

<div style="float: left; margin-top: 7px; width: 220px;" permission-roles="['ROLE_UNIT_WRITE']" flow-init="{target: getFlowJsTarget(), testChunks:false, headers: getFlowJsHeaders()}" flow-file-added="!!{jpg:1,jpeg:1}[$file.getExtension()]" flow-files-submitted="$flow.upload()" flow-file-success="$file.msg = $message"></div> 

//

public function checkChunk() 
{ 
    return $this->filesystem->exists($this->getChunkPath($this->getParameter('flowChunkNumber'))); 
} 

public function saveChunk() 
{ 
    /** @var \Symfony\Component\HttpFoundation\File\UploadedFile $file */ 
    $file = $this->getRequest()->files->get('file'); 
    $chunkFile = $this->getChunkPath(); 
    $file->move(dirname($chunkFile), basename($chunkFile)); 
} 

public function getChunkPath($index = null) 
{ 
    if (null === $index) { 
     $index = $this->getParameter('flowChunkNumber'); 
    } 

    return $this->tempDir . DIRECTORY_SEPARATOR . $this->getParameter('flowIdentifier') . '_' . $index; 
} 

エラーthisのようになっています。

NG-フローstandalone.js:1249 GET http://localhost:30080/api/v1/units/5732fa2dec045be8448b457d/photos?flowChu ... st1jpg & flowFilename = test1.jpg & flowRelativePath = test1.jpg & flowTotalChunks = 1 404(見つかりません)

+0

私は何か見落としているかどうかは分かりませんが、jsクライアントアプリケーションで使用しているSymfony関数の 'Routing.generate'ではありませんか?しかし、おそらくあなた自身のフロントエンドの実装を使用しているでしょう、私はそれが正しいと仮定します。 – kvetis

+0

はい。あなたが正しいです。 – Pradeepb

+0

今私はそれをもっと掘りました、それはSymfony JSバンドルです。 – kvetis

答えて

1

それはあなたのように見えます送信およびGET要求です。イメージをアップロードしようとしているときにPOSTリクエストを送信するはずですか?

サーバーでGETリクエストまたはPOSTリクエストが必要ですか?だからNG-フローがGETリクエストを送信しませんtestChunks:false

他の設定と一緒に
flow-init="{testChunks:false}" 

を追加

してみてください。

+0

私はここに書類[ここ](https://github.com/flowjs/ng-flow)を通って行った。私は '$ flow.upload()'がそれをすると信じています。私が間違っているなら、私を訂正してください。 – Pradeepb

+0

あなたのサーバーはPOSTリクエストを期待していますか? –

+0

flow-initでtestChuncks configをfalseに設定してみることはできますか? –

関連する問題