Обрабатывайте медиафайлы, прикрепленные к MMS, и сохраняйте их в базе данных (laravel).

#laravel #twilio

Вопрос:

У меня есть контроллер, который обрабатывает файлы, прикрепленные к MMS, Когда я отправляю SMS, контроллер обрабатывает его очень хорошо, но когда я отправляю MMS с файлом, он не работает и выдает мне ошибку 500 ( внутренняя ошибка сервера, я тестирую свой код и думаю, что проблема заключается в этой части

 for ($i=0; $i < $NumMedia; $i  ) {
            $mediaUrl = $request->input("MediaUrl$i");
            $MIMEType = $request->input("MediaContentType$i");
            $fileExtension = $converter->toExtension($MIMEType);
            $mediaSid = basename($mediaUrl);

            $media = $mediaService->getMediaContent($mediaUrl);

            $filename = "$mediaSid.$fileExtension";

            $mediaData = compact('mediaSid', 'MessageSid', 'mediaUrl', 'media', 'filename', 'MIMEType');
            $mmsMedia = new MMSMedia($mediaData);
            $mmsMedia->save();
        }
 

весь контроллер является:-

 <?php

namespace AppHttpControllers;

use AppHttpControllersController;
use AppMMSMedia;
use AppServicesMediaMessageServiceIMediaMessageService;
use IlluminateFoundationAuthAuthenticatesUsers;
use IlluminateHttpRequest;
use IlluminateHttpResponse;
use MagyarjetiMimeTypesMimeTypeConverter;
use TwilioRestClient;
use TwilioTwiMLMessagingResponse;

class MessagingController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Messaging Controller
    |--------------------------------------------------------------------------
    |
    | This controller receives messages from Twilio and makes the media available
    | via the /images url.
    */

    protected $twilio;
    protected $accountSid;
    protected $twilioNumber;
    protected $twilioNumberSid;
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->accountSid = env('TWILIO_SID');
        $this->twilioNumber = env('TWILIO_NUMBER');
        $this->twilioNumberSid = env('TWILIO_NUMBER_SID');
        $authToken = env('TWILIO_AUTH_TOKEN');

        $this->twilio = new Client($this->accountSid, $authToken);
    }

    public function handleIncomingSMS(Request $request, IMediaMessageService $mediaService)
    {
        $converter = new MimeTypeConverter;
        $NumMedia = (int)$request->input('NumMedia');
        $FromNumber = $request->input('From');
        $MessageSid = $request->input('MessageSid');

        for ($i=0; $i < $NumMedia; $i  ) {
            $mediaUrl = $request->input("MediaUrl$i");
            $MIMEType = $request->input("MediaContentType$i");
            $fileExtension = $converter->toExtension($MIMEType);
            $mediaSid = basename($mediaUrl);

            $media = $mediaService->getMediaContent($mediaUrl);

            $filename = "$mediaSid.$fileExtension";

            $mediaData = compact('mediaSid', 'MessageSid', 'mediaUrl', 'media', 'filename', 'MIMEType');
            $mmsMedia = new MMSMedia($mediaData);
            $mmsMedia->save();
        }

        $response = new MessagingResponse();
        $messageBody = $NumMedia == 0 ? 'Send us an image!' : "Thanks for the $NumMedia images.";
        $message = $response->message('',[
            'from' => $request->input('To'),
            'to' => $FromNumber
        ]);
        $message->body($messageBody);

        //return (string)$response;
        return response($response->asXML())->header('Content-Type', 'application/xml');
    }

    public function deleteMediaFromTwilio($mediaItem)
    {
        return $this->twilio->api->accounts($this->accountSid)
            ->messages($mediaItem['MessageSid'])
            ->media($mediaItem['mediaSid'])
            ->delete();
    }

    public function allMedia()
    {
        $mediaItems = MMSMedia::all();
        return $mediaItems;
    }

    public function getMediaFile($filename, Response $response)
    {
        $media = MMSMedia::where('filename', $filename)->firstOrFail();
        $fileContents = $media['media'];
        $MessageSid = $media['MessageSid'];
        $mediaSid = $media['mediaSid'];
        $MIMEType = $media['MIMEType'];

        $media->delete();
        $this->deleteMediaFromTwilio(compact('mediaSid', 'MessageSid'));

        return response($fileContents, 200)
            ->header('Content-Type', $MIMEType);
    }

    public function config()
    {
        return ['twilioNumber' => $this->twilioNumber];
    }
}
 

Есть какие-нибудь идеи по этому поводу?