Php Laravel 5中的远程URL上载

Php Laravel 5中的远程URL上载,php,ajax,laravel,laravel-5,Php,Ajax,Laravel,Laravel 5,我正试图创建一个网站来上传Laravel中的文件,但我不能:(,如果我在没有框架的情况下使用PHP,一切正常,但使用它(Laravel),我会出错,这是一个问题 这是我的代码: <form id="remote_upload" method="POST"> @csrf <input name="url" id="url" type="url" /> <input name="upload" id="upload" type="s

我正试图创建一个网站来上传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>
$(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上传文件:)

注意:关于上传验证(检查URL,如果有SSL…,我会这样做,但我希望你能看到我,如何仅通过URL添加上传进度、文件的真实大小及其原始名称,上传前:)


谢谢

假设您从ajax FormData对象获得了正确的数据,您只需执行以下操作:

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

    ...
}
这会将图像本地保存到您的laravel项目中,您可能需要为AmazonS3编辑它,但应该是类似的

如果要通过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);
      ...
}

您只需像这样使用
存储器

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
    ]);
}

有什么错误吗?谢谢,但我的意思是,我想从URL上传文件,而不是直接上传:)$cpmtents?这是什么?@SaifManwill我的意思是
$contents
谢谢,我现在就试试:)