Überprüfen, die eine base64-dekodierte Bild in laravel
Ich versuche, ein Bild aus einer PUT-request zum aktualisieren eines Benutzer-Bild(über Postboten) und machen es passieren durch eine Validierung in Laravel 5.2, für die Herstellung der call-in postman verwenden Sie die folgende url:
http://localhost:8000/api/v1/users?_method=PUT
und senden Sie die Bild-Zeichenfolge in den Körper, mit einem json-so:
{
"picture" : "data:image/png;base64,this-is-the-base64-encode-string"
}
In der controller versuchen, eine Menge von verschiedenen Möglichkeiten für die Dekodierung der Bild-und versuchen, passieren die Validierung:
- Zuerst habe ich versucht, dieses:
$data = request->input('picture'); $data = str_replace('data:image/png;base64,', '', $data); $data = str_replace(' ', '+', $data); $image = base64_decode($data); $file = app_path() . uniqid() . '.png'; $success = file_put_contents($file, $image);
- Dann habe ich versucht, dieses:
list($type, $data) = explode(';', $data); list(, $data) = explode(',', $data); $data = base64_decode($data); $typeFile = explode(':', $type); $extension = explode('/', $typeFile[1]); $ext = $extension[1]; Storage::put(public_path() . '/prueba.' . $ext, $data); $contents = Storage::get(base_path() . '/public/prueba.png');
- Versuchen, die intervention image library (http://image.intervention.io/) und don ' T pass:
$image = Image::make($data); $image->save(app_path() . 'test2.png'); $image = Image::make(app_path() . 'test1.png');
Dies ist die Validierung im controller:
$data = [
'picture' => $image,
'first_name' => $request->input('first_name'),
'last_name' => $request->input('last_name')
];
$validator = Validator::make($data, User::rulesForUpdate());
if ($validator->fails()) {
return $this->respondFailedParametersValidation('Parameters failed validation for a user picture');
}
dies ist die überprüfung der Benutzer-Modell:
public static function rulesForUpdate() {
return [
'first_name' => 'max:255',
'last_name' => 'max:255',
'picture' => 'image|max:5000|mimes:jpeg,png'
];
}
Ich bin nicht folgenden. Was ist das Problem, das Sie gegenüberstellen?
Cant pass die Validierung für ein Bild erstellt aus einem base64-string
Cant pass die Validierung für ein Bild erstellt aus einem base64-string
InformationsquelleAutor Jorge Almonacid | 2016-08-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verlängern Sie die Validator-Klasse von Laravel.
Laravel Doc
Aber trotzdem versuchen, diese
Vergessen Sie nicht, die Regeln:
InformationsquelleAutor jnieto
Wenn Sie mit Intervention sowieso, dann können Sie nutzen es für eine benutzerdefinierte Gültigkeitsregel. Ich habe eine namens "druckbaren". Im Grunde macht Sie sicher, dass der input gegeben wird, konvertiert werden kann, um eine Intervention Bild. Base64-Daten image-Zeichenfolgen übergeben werden. Ein string "foo" nicht.
Diese offensichtlich nur prüft, ob der Eingang ist in der Lage zu sein, in ein Bild umgewandelt. Jedoch, es sollte Ihnen zeigen, wie ein use-case, wie Sie nutzen können Intervention und jeder der es Methoden zum erstellen einer benutzerdefinierten Regel.
boot
Methode derAppServiceProvider
. Aber die base64-string übergeben nicht die Validierung. Bin ich etwas fehlt? Wo sich die Erweiterung definiert?Ich Stelle mir in den
boot
Methode als gut. Sie muss etwas anderes falsch.Das hat mir wirklich geholfen in meiner aktuellen app, Dank einer million!!
InformationsquelleAutor Mike McLin