我正在使用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">×</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);
}
答案 0 :(得分:0)
通常dropzone.js使用ajax上传图片。我可以看到你的js函数来初始化dropzone吗?
答案 1 :(得分:0)
尝试更改此行:$filePath = 'public/gallery/' . time() . '.' . $file->getClientOriginalExtension();
到
$filePath = 'public/gallery/' . $file->getClientOriginalName();
原因是:文件全部在同一时间上传,使用time()
命名所有具有相同名称的图像,当它到达服务器时,当然只有一个图像可用因为您不能拥有同名的多个图像。
如果您实际使用代码尝试2个不同的文件扩展名(.jpg
和.png
个文件),则会同时上传这些文件。
希望有所帮助。