2016-11-08 1 views
1

У меня есть $data переменного с base64: Это либо изображения или файл.Laravel base64 файл переместить в одну папку

Я хочу переместить этот файл в папку ... но он перемещен как пустой файл.


Мой код:

$file_name = Input::get('file_name'); 

$image = base64_decode($data); 

file_put_contents(public_path('/user_attachments/').$file_name, $image); 


Пожалуйста, кто-нибудь помочь?

+0

В папке user_attachments будет создано только пустое изображение или документы. – SARAN

+0

Мои данные - это файл base64. $ data = data: image/png; base64, iVBORw0KGgoAAAA ........... kSuQmCC – SARAN

+0

Проблема заключается в том, что 'data: image/png; base64'. Это превращает данные '$ data' в недопустимые данные. Попробуйте без 'data: URI scheme' (' data: image/png; base64, ') – tomloprod

ответ

2

Вы не включают data:URI scheme (data:image/png;base64,) внутри $data.

Вы можете удалить data:URI scheme с помощью функции explode, которая вернет массив с двумя элементами и перед использованием base64_decode.

  • $data[0] => данные: схема URI.
  • $data[1] => Ваши данные.

Используйте его как следует, используя в качестве разделителя ,:

$data = explode(',', $data)[1]; 


А потом Попробуйте следующий код:

$fileName = Input::get('file_name'); 
$fileStream = fopen(public_path() . '/user_attachments/' . $fileName , "wb"); 

fwrite($fileStream, base64_decode($data)); 
fclose($fileStream); 

или

//////////// The final filename. 
$fileName= Input::get('file_name'); 

//////////// Upload path 
$uploadPath = public_path() . "/user_attachments/" . $fileName; 

//////////// Decode your image/file 
$data = base64_decode($data); 

//////////// Upload the decoded file/image 
if(file_put_contents($uploadPath , $data)){ 
    echo "Success!"; 
}else{ 
    echo "Unable to save the file."; 
} 
+0

Этот файл также создается в папке. но он был пуст. – SARAN

+0

Ваша ошибка, безусловно, в вашей задаче '$ data'.Показать этот код. – tomloprod

+0

Мои данные - это файл base64. $ data = data: image/png; base64, iVBORw0KGgoAAAA ........... kSuQmCC – SARAN

0

Чтобы сделать это «Laravel way», вы должны использовать встроенный драйвер Storage/Flysystem.

Создать «диск» в массиве config/filesystems.php дисков, что-то вроде этого

'user_attachments' => [ 
    'driver' => 'local', 
    'root' => public_path('user_attachments') 
]; 

Затем вы можете сохранить файл Копание фасада хранения как этого

Storage::disk('user_attachments')->put('filename.txt', $contents);

Существуют другие способы для достижения этого, но это должно работать

Подробнее здесь https://laravel.com/docs/5.3/filesystem