我正在使用 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');
}
}
我做了流程需要的东西,但我不知道为什么它不起作用