Laravel和dropzone.js,上传多个图像复制最后一个选择

时间:2017-09-15 13:32:22

标签: laravel laravel-5 dropzone.js

我正在使用laravel和dropzone.js

当我逐个上传图片时,它可以正常工作。

然而,当我选择多个图像时,例如3个图像。

它确实将图像保存了3次,但它保存了最后一个图像,而不是去1,2和3.它分别为3,3和3。

这很奇怪,因为它实际上有3个请求,因此每个图像都应该单独保存。

这是我的表格:

<div class="z-index">
  <button id="modal-open" data-toggle="modal" data-target="#myModalHorizontal">Upload Gallery</button>
</div>
<div class="col-xs-12">
  <div class="modal fade" id="myModalHorizontal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">
    <div class="modal-dialog">
      <div class="modal-content">
        <!-- Modal Header -->
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" onclick="refreshPage();">
            <span aria-hidden="true">&times;</span>
            <span class="sr-only">Close</span>
          </button>
          <h4 class="modal-title" id="myModalLabel">
            Drag & Drop images or click to upload
          </h4>
        </div>
        <div class="modal-body">
          <form style="height: 50vh;" action="{{ url('/uploadgallery')}}" class="dropzone" id="gallery">
            <input type="hidden" name="_token" value="{{ csrf_token() }}">
          </form>
        </div>
      </div>
    </div>
  </div>
</div>

和控制器:

public function gallery(ImgRequest $request)
{
    if ($request->hasFile('file')) {
        $s3Path = config('app.path', public_path());
        $file = Input::file('file');
        print_r($file);
        $filePath = 'public/gallery/' . time() . '.' . $file->getClientOriginalExtension();
        $path = $s3Path . $filePath;
        Storage::disk('s3')->put($filePath, file_get_contents($file), 'public');
        $session = session()->get('key');
        $image = new Images;
        $image->path = $path;
        $image->entity_id = $session;
        $image->save();
        print_r($path);
    }

2 个答案:

答案 0 :(得分:0)

通常dropzone.js使用ajax上传图片。我可以看到你的js函数来初始化dropzone吗?

答案 1 :(得分:0)

尝试更改此行:$filePath = 'public/gallery/' . time() . '.' . $file->getClientOriginalExtension();

$filePath = 'public/gallery/' . $file->getClientOriginalName();

原因是:文件全部在同一时间上传,使用time()命名所有具有相同名称的图像,当它到达服务器时,当然只有一个图像可用因为您不能拥有同名的多个图像。

如果您实际使用代码尝试2个不同的文件扩展名(.jpg.png个文件),则会同时上传这些文件。

希望有所帮助。