2017-07-26 7 views
0

Hallo ich bin neu in Slim 3 Framework (API für mobile) Ich würde gerne wissen, wie man ein Bild auf einen Server hochladen, e Seecrh für Beispiele nicht viel gefunden, das ist der Code, den ich habe aber es funktioniert nicht.Eine Hilfe wäre großartig, danke.Slim 3 Bild auf Serverpfad hochladen

$app->post('/photo', function ($request, $response) use ($app) { 

    $files = $request->getUploadedFiles(); 
    if (empty($files['newfile'])) { 
     throw new Exception('Expected a newfile'); 
    } 

    $newfile = $files['newfile']; 


    if ($newfile->getError() === UPLOAD_ERR_OK) { 
    $uploadFileName = $newfile->getClientFilename(); 
    $newfile->moveTo("../photos/"); 
    } 

}); 

Der Fehler es mir

<h1>Slim Application Error</h1> 
    <p>The application could not run because of the following error:</p> 
    <h2>Details</h2> 
    <div> 
     <strong>Type:</strong> Error 
    </div> 
    <div> 
     <strong>Message:</strong> Call to a member function getError() on null 
    </div> 
    <div> 
     <strong>File:</strong> /home/bitstudi/public_html/api_pricegram/public/index.php 
    </div> 
    <div> 
     <strong>Line:</strong> 155 
    </div> 
    <h2>Trace</h2> 
 

#0 [internal function]: Closure->{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response), Array) 
#1 /home/bitstudi/public_html/api_pricegram/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(41): call_user_func(Object(Closure), Object(Slim\Http\Request), Object(Slim\Http\Response), Array) 

#2 /home/bitstudi/public_html/api_pricegram/vendor/slim/slim/Slim/Route.php(344): Slim\Handlers\Strategies\RequestResponse->__invoke(Object(Closure), Object(Slim\Http\Request), Object(Slim\Http\Response), Array) 

#3 /home/bitstudi/public_html/api_pricegram/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(122): Slim\Route->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response)) 

#4 /home/bitstudi/public_html/api_pricegram/vendor/slim/slim/Slim/Route.php(316): Slim\Route->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response)) 

#5 /home/bitstudi/public_html/api_pricegram/vendor/slim/slim/Slim/App.php(476): Slim\Route->run(Object(Slim\Http\Request), Object(Slim\Http\Response)) 

#6 /home/bitstudi/public_html/api_pricegram/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(122): Slim\App->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response)) 

#7 /home/bitstudi/public_html/api_pricegram/vendor/slim/slim/Slim/App.php(370): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response)) 

#8 /home/bitstudi/public_html/api_pricegram/vendor/slim/slim/Slim/App.php(295): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response)) 

#9 /home/bitstudi/public_html/api_pricegram/public/index.php(161): Slim\App->run() 

#10 {main}
+0

Sie auf das, was _ erweitern könnte "aber es funktioniert nicht" _ bedeutet? Vielleicht kannst du auch den kompletten Code posten, den du ausprobiert hast? (Das '// tue etwas mit $ newfile' weist darauf hin, dass Sie Ihren Versuch entfernt haben?) –

+0

Überprüfen Sie das Fehlerprotokoll auf die tatsächliche Fehlermeldung. Sie könnten Slim auch sagen, dass Sie die tatsächliche Fehlermeldung mit der Einstellung "displayErrorDetails" => true "anzeigen, was während der Entwicklung bevorzugt wird. –

+0

ich brache dieses Beispiel -> https://akrabat.com/psr-7-file-uploads-in-slim-3/ –

Antwort

2

gibt gelöst Ich mag dieses

use \Psr\Http\Message\ServerRequestInterface as Request; 
use \Psr\Http\Message\ResponseInterface as Response; 
use Slim\Http\UploadedFile; 

require '../vendor/autoload.php'; 

$app = new \Slim\App([ 
'settings' => [ 
    'displayErrorDetails' => true 
] 
    ]); 



$container = $app->getContainer(); 
$container['upload_directory'] ='../photos/'; 

$app->post('/photo', function (Request $request, Response $response) use ($app) { 

$directory = $this->get('upload_directory'); 

$uploadedFiles = $request->getUploadedFiles(); 

$uploadedFile = $uploadedFiles['picture']; 
    if($uploadedFile->getError() === UPLOAD_ERR_OK) { 
    $filename = moveUploadedFile($directory, $uploadedFile); 
    $response->write('uploaded ' . $filename . '<br/>'); 
} 

}); 


function moveUploadedFile($directory, UploadedFile $uploadedFile){ 
$extension = pathinfo($uploadedFile->getClientFilename(), 
PATHINFO_EXTENSION); 
$basename = bin2hex(random_bytes(8)); 
$filename = sprintf('%s.%0.8s', $basename, $extension); 
$uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename); 

return $filename; 
} 


$app->run();