Как загрузить файл на сервер с php Laravel
Хотел бы знать, как я могу загрузить изображения или видео с помощью Laravel и сохранить на моем сервере прямо, взяв в url-адрес, как например: https://brandmark.io/logo-rank/random/beats.png
?
1 answers
Сначала мы создаем поля на Каналы:
<!DOCTYPE html>
<html>
<body>
<form action="/arquivos" method="post" enctype="multipart/form-data">
<input type="file" name="arquivo">
<input type="submit" value="Enviar" name="submit">
</form>
</body>
</html>
После того, как мы создали маршрут для Контроллера:
Route::post('/arquivo', 'ArquivoController@store');
, Здесь вы можете использовать стандартные методы PHP, как:
, Чтобы проверить, если файл был загружен
if ( isset( $_FILES[ 'arquivo' ][ 'name' ] ) && $_FILES[ 'arquivo' ][ 'error' ] == 0 )
Ловит расширение и ограничивает только для изображений:
$extensao = pathinfo ( $nome, PATHINFO_EXTENSION );
$extensao = strtolower ( $extensao );
if ( strstr ( '.jpg;.jpeg;.gif;.png', $extensao ) ) {
$novoNome = uniqid ( time () ) . '.' . $extensao;
$destino = 'imagens / ' . $novoNome;
if ( @move_uploaded_file ( $arquivo_tmp, $destino ) ) {
return 'sucesso ao enviar! ';
} else {
return 'erro ao enviar!';
}
}
, Здесь в случае, если файлы будут сохранены в директории: /public или /public/изображений уже, что в коде мы создали этот каталог.
В документации Laravel существует класс определяет, чтобы справиться с этим Storage. Чтобы использовать его, вам необходимо создать ссылку simbolico между папки вашего проекта laravel: public/storage в storage/app/public, вы должны сделать это в качестве меры безопасности: просто перейдите в консоли в папке вашего проекта и использовать команду
php artisan storage:link
Затем вы должны ссылаться на класс Storage в своем контроллере:
<?php
namespace App\Http\Controllers;
use Storage; // <--------
use Illuminate\Http\Request;
class ArquivoController extends Controller
{
Затем вы используете метод request(); чтобы получить данные из файла:
$arquivo = new Arquivo(); // cria uma instancia do arquivo
$arquivo->nomeArquivo = request()->file('arquivo')->getClientOriginalName();
$arquivo->destino = "imagens/";
$arquivo->extensao = strtolower(request()->file('arquivo')->getClientOriginalExtension());
$arquivo->tamanho = request()->file('arquivo')->getSize();
if ( strstr ( '.jpg;.jpeg;.gif;.png', $arquivo->extensao ) ) {
// Verifica se exite o diretorio, se não cria o diretorio;
if (!Storage::exists("public/".$arquivo->destino)) {
Storage::makeDirectory("public/".$arquivo->destino, 0777, true);
}
Storage::put("public/".$arquivo->destino, file_get_contents(request()->file('arquivo')));
$arquivo->save(); // salva um registro no banco de dados sobre esse arquivo
return "Imagem enviada com sucesso!";
} else {
return "Erro! Tipo de Arquivo não é uma imagem!";
}
Получить url-адрес файла, который вы используете этот код здесь:)
$arquivo = Arquivo::findOrFail($id);
$url = Storage::url($arquivo->destino."/".$arquivo->nome);
return $url;
, Если вы хотите сделать доступными для пользователя, чтобы загрузить изображение, вы можете перенаправить его на другой странице, чтобы он скачать, здесь я не использовал Storage, но у него также есть метод для загрузки:
$arquivo = Arquivo::findOrFail($id);
return response()->download(storage_path("app/public/".$arquivo->destino."/".$arquivo->nome));
Вот некоторые сайты, которые я использовал, чтобы загрузить файлы:
W3schools, имеет учебник основные блага, как это сделать, используя собственные методы PHP, но в английский.
Eduardokraus, учебник на португальском, используя собственные методы PHP.
Документация Laravel v5.5 документации laravel о файловой системе, которую они создали, здесь имеет более подробной информации о Storage. Документация на английском языке, но recomento прочитать с помощью переводчика, так как объясняет все функциональные возможности класса. Я использовал 5.5.
Если вы хотите использовать систему Drag&Drop для загрузки файлов рекомендую эти учебники (JavaScript/Jquery):
Talkerscode, единственная проблема этого сайта в том, что он очень загрязнен.
Css-tricks, это учебник более презентабельно, больше это немного сложнее.