УДАЛЕННЫЙ URL ЗАГРУЗИТЬ в Laravel 5 - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь создать сайт для загрузки файлов в Laravel, но не могу :(, если я использую PHP без фреймворка, все работает, но с ним (Laravel) я получаю ОШИБКИ, и это проблема.

Это мой код:

<form id="remote_upload" method="POST">
      @csrf 
      <input name="url" id="url" type="url" />
      <input name="upload" id="upload" type="submit" />
</form>

Мой код AJAX:

$(document).ready(function(){

 $('#remote_upload').on('submit', function(event){
    event.preventDefault();
    $.ajax({
     url: "{{ route('remote_upload') }}",
     method:"POST",
     data: new FormData(this),
     // IF WE HAVE ANY FUNCTION TO SET UPLOAD PROGRESS FOR REMOTE UPLOAD - PLEASE TELL ME :) 
     xhr: function() {
          var myXhr = $.ajaxSettings.xhr();
          if(myXhr.upload){
              myXhr.upload.addEventListener('progress', progressHandlerHome, false);
              myXhr.addEventListener("load", completeHandlerHome, false);
              myXhr.addEventListener("error", errorHandlerHome, false);
              myXhr.addEventListener("abort", abortHandlerHome, false);
          }
          return myXhr;
      },
     dataType:'JSON',
     contentType: false,
     cache: false,
     processData: false,
     // IF SUCCESS
     success:function(data)
     {
        $('.result').html(data.link);
     }
  });
 });

});

А это мой контроллер:

protected function remote_upload(Request $request) {
        $file = file_get_contents($request->url_file);

        // UPLOAD FILE
        if (getValue('storage_type', 'disk') == 's3') {
            $path = Storage::disk('s3')->putFile('files', $file);
            $storage = 's3';
        } else {
            $path = Storage::putFile('files', $file);
            $storage = 'disk';
        }

        return response()->json([
            'link' => $path
        ]);
    }

Я не знаю, есть ли у нас пакет для загрузки файлов с URL в Laravel :)

Примечание : о проверке загрузки (проверьте, если URL, если есть SSL ...), я сделаю это, но я надеюсь, что вы видите меня, как добавить прогресс загрузки, реальный размер файл и его оригинальное имя только через URL, Перед загрузкой :)

Спасибо

1 Ответ

0 голосов
/ 05 января 2019

Предполагая, что вы получаете правильные данные из объекта ajax FormData, вы можете просто сделать это:

public function store(Request $request)
{
    $imgLocation = Storage::disk('public')->put("imagename", $request->file('image'));

    ...
}

Это сохранит изображение локально в вашем проекте laravel, вам может понадобиться отредактировать его для amazon s3, но оно должно быть похожим.

Если вы хотите загрузить изображение через URL, попробуйте сделать следующее:

public function store(Request $request) {
      $url = $request->image;
      $contents = file_get_contents($url);
      $name = substr($url, strrpos($url, '/') + 1);
      Storage::disk('s3')->putFile($name, $contents);
      ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...