Php Yii2 загрузить base64 образ не удается с file_put_contents - PullRequest
0 голосов
/ 29 сентября 2019

Я получаю изображение в кодировке base64 от Android, и я хотел бы загрузить его в yii2

ТАК Я добавил следующее

$success = file_put_contents(Yii::getAlias('@web').'/uploads/img.png'
              ,base64_decode($detail));

ГДЕ $ detail - это кодированное в Base 64 изображение

Когда я пытаюсь загрузить, я получаю сообщение об ошибке

yii\base\ErrorException: file_put_contents(/uploads/img.png):
  failed to open stream: No such file or directory 

Что еще нужно добавить, чтобы загрузка работала, так как большинство результатов показывают вышеуказанное

Ответы [ 2 ]

3 голосов
/ 29 сентября 2019

Проблема в псевдониме, который вы использовали. Псевдоним @web - это базовый URL текущего запущенного приложения, которое в вашем случае является пустой строкой. Благодаря этому вы пытаетесь сохранить загруженный файл как /uploads/img.png.

Возможно, вы захотите использовать вместо него псевдоним @webroot. Он указывает на каталог, содержащий файл index.php.

Подробнее о предопределенных псевдонимах можно узнать здесь .

2 голосов
/ 29 сентября 2019

папка для загрузки находится в папке web

$success = file_put_contents(Yii::getAlias('@web/uploads/img.png'
              ,base64_decode($detail));

базовый путь или root проекта

$success = file_put_contents(Yii::getAlias('@app/uploads/img.png'
              ,base64_decode($detail)); //base path

$success = file_put_contents(Yii::getAlias('@webroot/uploads/img.png'
              ,base64_decode($detail)); //root directory(directory containing the entry script.)

Дополнительные примеры: В корне проекта

$_SERVER["DOCUMENT_ROOT"].'/uploads/img.png';
\yii\helpers\Url::to('@webroot/uploads/img.png');

Получить файл из папки в корне проекта (код находится в другой папке):

__DIR__.'\..\uploads\img.png'
...