【问题标题】:Laravel form - show file upload progress, then redirect to view when uploading finishesLaravel 表单 - 显示文件上传进度,然后在上传完成时重定向到查看
【发布时间】:2016-11-09 15:38:56
【问题描述】:

我有一个成功上传文件的 laravel 应用程序。我需要在文件上传时显示进度条,因为用户可能会上传视频,然后在上传完成时重定向到某个视图。 我尝试了一些实际可行但不合我口味的解决方案。例如,我尝试了 DropZone,但我只上传了一个文件,我不需要拖放功能。 有效并接近我想要的解决方案是使用 jquery.form 插件。但问题是,当文件上传完成时,我仍然希望表单提交并重定向到下一页。 意思是,上传完成后,我仍然希望执行下一行

return redirect()->action('PostController@edit', $post->PostID);

这是我的控制器(PostController)

public function attachstore(Request $request, $PostID)
{

$post = Post::findOrFail($PostID);

if ($request->hasFile('TextFile')) {
    $TextName = "";

    $now = \DateTime::createFromFormat('U.u', microtime(true));
    $nowStr = $now->format("m-d-Y-H-i-s-u");

    $TextName =  $nowStr . '.' . $request->file('TextFile')->getClientOriginalExtension();
    $request->file('TextFile')->move(base_path() . '/public/textuploads/', $TextName);
    $post->PostText = $TextName;  
}  


if ($request->hasFile('VideoFile')) {
    $VideoName = "";
    $now = \DateTime::createFromFormat('U.u', microtime(true));
    $nowStr = $now->format("m-d-Y-H-i-s-u");

    $VideoName =  $nowStr . '.' . $request->file('VideoFile')->getClientOriginalExtension();
    $request->file('VideoFile')->move(base_path() . '/public/videouploads/', $VideoName);
    $post->PostVideo = $VideoName; 
}  

$post->Save();

return redirect()->action('PostController@edit', $post->PostID);

}

这是我的观点(attach.blade.php)

   {!! Form::open(array('route' => array('posts.attachstore', $post->PostID), 'files' => true)) !!}
   <div class="col-md-12">    
    <div class="form-group">     
      {!! Form::file('TextFile', null, array('class'=>'form-control')) !!}
    </div>
  </div>

  <div class="col-md-12">    
    <div class="form-group">     
      {!! Form::file('VideoFile', null, array('class'=>'form-control')) !!}
    </div>
  </div>

  {!!Form::button('Next', array('type' => 'submit', 'class' => 'btn btn-primary finish col-md-4'))  !!}
  {!! Form::close() !!}

我不知道不使用 ajax 是否可以做到这一点,但我更喜欢使用 ajax 仅报告服务器已接收或客户端已发送多少文件的解决方案。我不想使用 ajax 上传文件,只是估计传输的文件大小。

【问题讨论】:

  • Dropzone 可以工作,您可以指定文件的最大数量,如果您只想要一个文件,则将其设置为 1。并且 dropzone 将使用 AJAX,因此 javascript 可以在您收到上传响应后处理重定向.
  • 可以在没有javascript的情况下完成重定向吗?因此,在文件上传时进度条将可见,并且重定向由控制器处理(return redirect()->action('PostController@edit', $post->PostID);)
  • Dropzone 进度将在文件上传时播下。上传完成后,你就可以做重定向的东西了

标签: php laravel laravel-5.1


【解决方案1】:

我建议使用专用库来实现这一点,而不是重写所有代码。

尝试其中任何一个,否则如果您在谷歌上搜索其他库并使用任何适合的库,您会得到更多。

http://www.dropzonejs.com/

https://github.com/zimt28/laravel-jquery-file-upload

【讨论】:

    【解决方案2】:

    我使用blueimp fileupoad 来实现这一点。

    他们有一个great example,其中包含多个文件上传的代码以及上传进度。您可以轻松地在 javascript 中添加重定向作为回调。

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多