2016-09-27 4 views
0

Ich bin neu in symfony REST fromework. In unserem Projekt verwenden wir ng-upload um die Bilder hochzuladen. Unten ist der Code dafür verantwortlich.ng-flow throws 404 error

// 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> 

// in Controller (Frontend)

$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}); 
}; 

// Backend-Code - UnitController.php

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

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; 
} 

Fehler Ich bekomme wie this.

ng-flow-standalone.js: 1249 GET http://localhost:30080/api/v1/units/5732fa2dec045be8448b457d/photos?flowChu ... st1jpg & flowFilename = test1.jpg & flowRelativePath = test1.jpg & flowTotalChunks = 1 404 (nicht gefunden)

+0

Ich bin mir nicht sicher, ob ich gerade etwas übersehen habe, aber ist 'Routing.generate' nicht eine Symfony-Funktion, die Sie in Ihrer js-Client-Anwendung verwenden? Aber Sie verwenden wahrscheinlich Ihre eigene Frontend-Implementierung, und ich gehe davon aus, dass sie korrekt ist. – kvetis

+0

Ja. Du hast recht. – Pradeepb

+0

Alles klar jetzt habe ich mehr in es gegraben, es ist Symfony JS Bundle, thx für die Klärung. – kvetis

Antwort

1

Es sieht aus wie Sie Senden und GET-Anfrage. Solltest du nicht eine POST-Anfrage senden, wenn du versuchst, ein Image hochzuladen?

Erwartet Ihr Server eine GET- oder eine POST-Anfrage?

Try testChunks:false zusammen mit anderer Konfiguration

flow-init="{testChunks:false}" 

Damit ng-flow sendet nicht eine GET-Anforderung hinzufügen.

+0

Ich ging durch die Dokumentation [hier] (https://github.com/flowjs/ng-flow). Ich glaube, '$ flow.upload()' wird das tun. Korrigiere mich, wenn ich falsch liege. – Pradeepb

+0

Also erwartet Ihr Server eine POST-Anfrage? –

+0

Können Sie versuchen, testflowconfig in flow-init auf false zu setzen? –

Verwandte Themen