【问题标题】:Slim 3 upload image to server pathSlim 3 上传图片到服务器路径
【发布时间】:2018-01-01 15:33:16
【问题描述】:

您好,我是 slim 3 框架(移动 Api)中的新成员非常感谢。

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

 });

它给我的错误

 <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 [内部函数]: 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\响应),数组) #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) , 对象(Slim\Http\Response), 数组) #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 {主要}

【问题讨论】:

  • 您能否详细说明“但它不起作用” 的含义?另外,也许发布您尝试过的完整代码? (// do something with $newfile 表明您已删除您的尝试?)
  • 检查错误日志以获取实际的错误消息。你也可以告诉 Slim 显示实际的错误信息,设置为:'displayErrorDetails' =&gt; true,这是你开发时的首选。
  • 我不喜欢这个例子 -> akrabat.com/psr-7-file-uploads-in-slim-3
  • 我们仍然需要查看实际的错误信息。请按照上面的建议打开displayErrorDetails,然后重试。顺便说一句,您是否在$newfile-&gt;moveTo("/path/to/$uploadFileName") 通话中更改了/path/to/?这需要在您的服务器上设置为绝对路径,您的 PHP 代码在其中具有写入权限。
  • 好的,我更新了问题,但是有什么例子我应该休息一下吗?

标签: php slim-3


【解决方案1】:

我是这样解决的

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();

【讨论】:

    猜你喜欢
    • 2018-03-21
    • 2012-04-30
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多