#laravel #image #file #base64 #storage
#laravel #изображение #файл #base64 #Хранение
Вопрос:
У меня есть форма, содержащая тег img в атрибуте src, у меня есть изображение base 64, я хочу сохранить это изображение в папке общего хранилища.
приведенный ниже скрипт работает нормально, за исключением того, что он сохраняет изображение в формате png, но при предварительном просмотре я ничего не вижу!!!
js ajax :
$('#form').submit(function(e) {
e.preventDefault();
var formData = new FormData(this);
formData.append('imgsrc',$('#thumbnail_pic').attr('src')),
$.ajax({
headers: { 'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content') },
url: "{{ route('file.upload') }}",
data: formData,
type: 'post',
async: false,
processData: false,
contentType: false,
success:function(data){
console.log(data);
alert('uploaded');
}
});
});
контроллер :
$image = $request->input('imgsrc');
$image = str_replace('data:image/png;base64,', '', $image);
$image = str_replace(' ', ' ', $image);
$imageName = 'test.png';
$success= Storage::disk('public')->put($imageName, base64_decode($image));
Комментарии:
1. Как я понял из вашего вопроса, проблема не в сохранении, поскольку он уже сохраняется, сохраненный файл неверен. Сначала проверьте, что форма содержит несколько частей в параметре encryption, а затем убедитесь перед сохранением файла, что входные данные являются file
2. форма уже имеет многосоставность в параметрах шифрования, для входного типа file у меня его нет в форме, я создал это изображение из скриншота и сохранил его в img
3. if (preg_match(‘/^data:image/(w );base64,/’, $image)) { $data = substr($image, strpos($image, ‘,’) 1); $ imageName = ‘test.png’; $success= Хранилище:: диск (‘общедоступный’)-> поместить($imageName, base64_decode($ data)); } это может помочь
4. У меня нет данных: изображение, у меня есть данные: приложение / октет-поток; base64,….
5. тогда вот почему у вас эта проблема, это означает, что ваша строка $image = str_replace(‘data: image / png;base64,’, «, $ image); не работает. это не повлияет на строку. попробуйте: str_replace(‘data:application /octet-stream;base64,’, «, $image);