-1
votes

Extraire base64 image de la chaîne et postez-la avec formulaire

J'essaie de télécharger une image avec mon formulaire dans mon projet code> Laravel code>. J'ai une image Cropper qui enregistre l'image comme Data: image / jpeg; base64, / 9j / 4aaqskzjrgabaqaaaqabaad /..ke/ code>

Le Cropper envoie un json code> chaîne qui contient un base64 code> codé de la chaîne de fichier, j'ai besoin d'analyser la chaîne code> json code> à un objet, puis d'extraire la chaîne base64 code> et tournez-la dans un Objet de fichier. p>

J'utilise l'intervention de l'image code> pour le processus de téléchargement p>

fonction du contrôleur p> xxx pré>

View p>

<form class="form-horizontal" action="{{route('posts.store')}}" method="POST" enctype="multipart/form-data">{{ csrf_field() }}

<fieldset class="form-group">
<label for="featimage">Upload Image</label>
<input type="file" class="form-control slim" data-ratio="4:3" name="featimage">

<label class="col-md-2 col-form-label">Post Body</label>
<textarea type="textarea" class="form-control" rows="10" name="body"></textarea>
</fieldset>

<button class="btn btn-primary btn-block" name="submit">Save</button>
<button class="btn btn-danger btn-block" name="submit">Cancel</button>

</form>    


3 commentaires

Souhaitez-vous télécharger l'image de base64 sur votre serveur?


Oui, je voudrais le télécharger dans mon dossier public / images / téléchargements et enregistrer le nom de fichier dans ma db


Veuillez vous fournir un lien vers la bibliothèque de Cropper que vous utilisez ainsi que le JavaScript que vous devez initialiser? Aussi, est $ Demande-> HASFILE ('FOOTIMAGE') définitivement Evaluation à True ??


3 Réponses :


0
votes

Essayez cet espoir que cela fonctionnera pour vous. xxx


5 commentaires

Avez-vous envoyé votre image comme une chaîne de base64 au contrôleur?


Lorsque je récolte mon image, il génère une chaîne de base64, donc j'ai besoin de le décoder et de le télécharger sur le serveur.


OK Si vous attribuez votre chaîne de base64 à la variable "$ FORETIMAGE" sur le code ci-dessus, cela fonctionnera certainement que j'ai testé à ma fin.


Dois-je écrire JavaScript pour y parvenir? Pourriez-vous me montrer un exemple


Pas besoin d'utiliser JavaScript. Essayez simplement d'assigner "Data: image / jpeg; base64, / 9j / 4aaqskzjrgabaqaaaqabaad /." String to $ $TImage; et changez votre chemin de téléchargement. Je mentionne clairement le commentaire dans le code.



0
votes

J'ai couru votre code dans mon programme et j'ai eu beaucoup d'erreur. Si vous essayez de donner une entrée en tant que chaîne codée de base64 en tant que 'Data: image / jpeg; base64, / 9j / 4aaqskzjrgabaqaaaqabaad /..' et convertissez-le en fichier image puis utilisez le code ci-dessous:

$post = new Post;
$post->title = $request->title;
$post->body = $request->body;
$post->user_id = auth()->id();

if ($request->hasFile('featimage')) {
    $image = $request->file('featimage'); 
    $extension = $image->getCLientOriginalExtension(); //gives extension of image
    $filename = time() . '.' . $extension; //gives filename

    $location = public_path('images/uploads/' . $filename); //sets path

    $image = Image::make($image)->save($location); //makes image and saves it to that location

    $base64 = 'data:image/' . $extension . ';base64,' . base64_encode($image); //changes image to base64 image

    $post->image = $filename;
}

$post->save();


5 commentaires

Bonjour cela n'a pas travaillé pour moi merci pour votre aide


Avez-vous installé un package d'intervention de l'image? Faites également des images / téléchargements. Ensuite, cela fonctionnera Béacuse, cela fonctionne bien dans mon code. Et je faisais aussi avoir ce problème une fois que je l'ai résolu en utilisant le même code. Merci pour votre réponse cependant.


Oui, j'ai le forfait d'intervention d'image, je peux télécharger une image via une entrée de téléchargement standard sans problème.


Sa ne pas détecter la balise "FOOTIMAGE", je pense que je pourrais avoir besoin de JS pour obtenir ce travail


Si vous utilisez base64, alors n'utilisez pas $ Demande-> HASFILE ('FOOTIMAGE') car base64 n'est pas un fichier simplement utiliser $ Demande-> FOOTIMAGE



1
votes

Vous pouvez essayer cette fonction.

    function uploadImage($base_64_string,$image_name)
{

    preg_match("/^data:image\/(.*);base64/i", $base_64_string, $match);
    $extension_array = explode('/', (explode(';', $base_64_string))[0]);
    $extension = end($extension_array);

    $img = $base_64_string;
    if ($extension == 'png' || $extension == 'jpg' || $extension == 'jpeg'){
        $img = str_replace('data:image/' . $extension . ';base64,', '', $img);}
    elseif ($extension == 'mp4' || $extension == 'mov'){
        $img = str_replace('data:video/' . $extension . ';base64,', '', $img);
    }
    $img = str_replace(' ', '+', $img);

    $data = base64_decode($img);

    $fileNameI = $image_name.'_'.rand().time() . '.' . $extension;

//Uploading Image To S3 Bucket
    $s3 = Storage::disk('s3-image');
    $filePath = Config::get('common.Image_Folder') . $fileNameI;
    $s3->put($filePath, $data, 'public');

    return $fileNameI;
}


0 commentaires