如何将来自 Twilio 电话号码的附加到 MMS 的文件存储到 Laravel 数据库中?

我正在使用 Laravel 7 开发一个网站。我还有一个 Twilio 电话号码,用于接收带有附加文件的彩信,我想将这些文件存储在我网站的数据库中。我想知道这个过程中出了什么问题

我的控制器代码是

<?php


namespace App\Http\Controllers;


use App\Http\Controllers\Controller;
use App\MMSMedia;
use App\Services\MediaMessageService\IMediaMessageService;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Magyarjeti\MimeTypes\MimeTypeConverter;
use Twilio\Rest\Client;
use Twilio\Twiml;


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


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

我在数据库中的表是

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateMMSMediaTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('m_m_s_media',function (Blueprint $table) {
            $table->id();
            $table->timestamps();
            $table->string('mediaSid')->index();
            $table->string('MessageSid')->index();
            $table->string('mediaUrl')->index();
            $table->binary('media');
            $table->string('filename')->index();
            $table->string('MIMEType');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('m_m_s_media');
    }
}

我做了流程需要的东西,但我不知道为什么它不起作用

fql920011429 回答:如何将来自 Twilio 电话号码的附加到 MMS 的文件存储到 Laravel 数据库中?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/919.html

大家都在问