Как загрузить файл на сервер с php Laravel


Хотел бы знать, как я могу загрузить изображения или видео с помощью Laravel и сохранить на моем сервере прямо, взяв в url-адрес, как например: https://brandmark.io/logo-rank/random/beats.png?

Author: Tiago Ferezin, 2019-03-28

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, это учебник более презентабельно, больше это немного сложнее.

 2
Author: Jordann Vieira, 2019-03-28 19:56:04