【问题标题】:REMOTE URL UPLOAD in Laravel 5Laravel 5 中的远程 URL 上传
【发布时间】:2019-05-31 23:55:22
【问题描述】:

我正在尝试创建一个网站以在 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
        ]);
    }

我不知道我们是否有一个包可以从 Laravel 中的 URL 上传文件:)

注意:关于上传验证(Check if URL, If Have SSL ...),我会做的,但是希望你看到我,如何添加上传进度,真实大小文件及其原始名称仅通过 URL,上传之前 :)

谢谢

【问题讨论】:

  • 有什么错误?

标签: php ajax laravel laravel-5


【解决方案1】:

假设您从 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);
      ...
}

【讨论】:

  • 谢谢,但我的意思是,我想从 URL 上传文件 - 不直接 :)
  • $cpmtents ?这是什么?
  • @SaifManwill 我的意思是$contents
  • 谢谢,我现在试试:)
【解决方案2】:

您可以像这样使用Storage

protected function remote_upload(Request $request) {
    $file = $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
    ]);
}

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 2017-08-27
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2017-01-20
    相关资源
    最近更新 更多