我在 Laravel 应用程序中使用 Dropzone。在 Dropzone 中,我可以限制一次上传的最大文件数。然而,刷新页面后,用户可以上传更多照片。
Dropzone.options.addPhotosForm = {
maxFiles: 5,
};
我可以在前端删除此功能,方法是计算该用户已为此页面上传的照片数量,然后将类更改为 display:none;并给予警告如下:
<div class="@if(count($rooms->photos) >= 10) d-none @endif">
<form action="{{ route('myroute', [$rooms->slug]) }}" method="POST" class="dropzone" id="addPhotosForm">
{{ csrf_field() }}
</form>
</div>
<div class="@if(count($rooms->photos) < 10) d-none @endif">
<p>You have uploaded {{ count($rooms->photos)}} photos. This is too many.</p>
</div>
这里的问题是,如果用户上传了 9 张照片,那么他们可以再上传 5 张照片,总共会得到 14 张照片,而不是 10 张照片,这是所需的最大值。此外,如果用户是恶意的,他们可以简单地转到“检查元素”,删除显示:无;根据需要设计并上传尽可能多的照片。
我想禁用用户在 Javascript 中上传更多照片的能力,我正在尝试使用 Laravel 的 Blade 来执行此操作,但遇到了一些问题。
所以,我有几个问题:
1) 我可以在 Javascript 中使用 Blade 吗?
我已经尝试过,例如使用:
var count = count($rooms->photos);
然后我收到错误,
Uncaught SyntaxError: Unexpected token >
如果我能让这个工作正常,我的想法是在 Dropzone 选项中执行此操作。
init: function(file) {
if (count >= 10){
myDropzone.removeFile(file);
};
2) 有没有更好的方法来限制所有上传到 Dropzone 的内容?
我在这里尝试了一些建议,但没有成功。
谢谢!
布拉德
编辑:解决方案
感谢@Lukas 和@Miguel Cabrera 的快速回复!
我已根据您的意见采用了解决方案。
<script type="text/javascript">
var count = {{ count($rooms->photos) }};
var maxFiles = 10 - {{ count($rooms->photos) }};
</script>
<script type="text/javascript">
Dropzone.options.addPhotosForm = {
maxFiles: maxFiles,
}
</script>
这非常有效。再次感谢!! :)
最佳答案
>我可以在 Javascript 中使用 Blade 吗?
假设 $rooms->photos 是一个数组或正在实现一个 Countable 接口(interface),以下是如何使用blade 将照片计数传递给 javascript:
<script type="text/javascript">
var count = {{ count($rooms->photos) }};
</script>
2) 有没有更好的方法来限制所有上传到 Dropzone 的内容?
我认为你的解决方案很好。只需记住针对过多文件上传的后端保护即可。
关于javascript - 在 Javascript 中使用 Laravel Blade 和 Dropzone -> 上传的最大文件总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46444736/