【发布时间】:2020-08-19 10:40:29
【问题描述】:
我的 laravel 网站上有一个表单,其中有一个部分允许用户上传多个图像文件(带有所选图像的预览)。如果用户只选择了多个图像一次,一切正常,并且所选图像被上传。但是,如果用户在提交表单之前在两个不同的场合选择了多张图片,则只会上传最后一组选择的图片。
例如;用户选择 4 张图片,然后填写表单上的其他一些字段,然后他们决定在提交表单之前在之前选择的 4 张图片之上再添加 3 张图片。图片预览框将包含他们选择的所有 7 张图片,但一旦提交表单,只会上传他们选择的最后 3 张图片。
HTML 多文件输入:
<input id="gphotos" type="file" name="gphotos[]" multiple>
<div class="preview"></div>
JavaScript:
function gphoto(input, ImagePreview) {
if (input.files) {
var fileAmount = input.files.length;
for (i = 0; i < fileAmount; i++) {
var reader = new FileReader();
reader.onload = function(e) {
$('.preview').css('margin-top', '4px');
$($.parseHTML('<img class="gphoto">')).attr('src', e.target.result).appendTo(ImagePreview);
}
reader.readAsDataURL(input.files[i]);
}
}
};
$('#gphotos').change(function() {
gphoto(this, 'div.preview');
});
控制器:
if (request('gphotos')) {
$imageArray['gphotos'] = array();
foreach (request()->gphotos as $gphoto) {
$gphotoPath = $gphoto->store('gphotos', 'public');
$imageArray['gphotos'][] = $gphotoPath;
}
$imageArray['gphotos'] = json_encode($imageArray['gphotos']);
}
我希望用户能够在提交表单之前在多个不同的场合选择多张图片,然后上传他们的所有图片。我已经尝试在整个互联网上搜索,但是对于这个看似简单的问题,没有人有一个简单的解决方案。如果有人能帮我解决这个问题,我将不胜感激。
【问题讨论】:
-
如何提交文件。是通过 AJAX 还是不使用 JavaScript?
-
没有 JavaScript
-
好吧,当您更改表单的默认行为时,这种情况需要 JavaScript。您需要将上传的图像存储在容器中以收集它们。当您提交它们时,通过 AJAX 发送容器而不是实际发送表单。这样您可以控制发送的内容。
-
您能给我一个代码示例,说明如何实现这一目标吗?
标签: javascript html jquery laravel forms