Я пытаюсь загрузить изображения из базы данных в зону сброса и правильно отформатировать файл, чтобы я мог повторно отправить его обратно в базу данных.Я также использую jQuery Sortable, потому что я хочу, чтобы они отправлялись по порядку.
Я использую шаблон лезвия Laravel.В настоящее время, когда я отправляю форму, я получаю нулевое значение.В контроллере я использую $request->file('file');
Я также пытался $request->file;
Я также пытался $request->file[0]
и $request->file('file')[0];
Я читал что-то вчера где-то о том, когда вы emit('addedfile')
, а затем emit('thumbnail')
онина самом деле физические изображения не находятся в очереди, но, как вы можете видеть, я добавляю их вручную, поэтому разве они не должны просто отправлять processQueue()
как обычный файл в очереди?
Для ясности, изображения отображаются правильнов дропзоне;Я просто не могу отправить их повторно.
Ниже приведен мой код JavaScript:
<script>
Dropzone.autoDiscover = false;
var mydropzone = new Dropzone('.project-dropzone', {
url: "{{route('projects.update', $project->id)}}",
paramName: "file",
maxFileSize: 2,
method: "PATCH",
autoQueue: true,
autoProcessQueue: false,
headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
parallelUploads: 10,
addRemoveLinks: true,
uploadMultiple: true,
init: function() {
dp = this;
// Add the files from the sever to the dropzone
@foreach($project->media as $image)
var currentFile = {
name: "{{$image->file}}",
previewElement: "div.dz-preview.dz-complete.dz-image-preview.ui-sortable-handle",
previewTemplate: "div.dz-preview.dz-complete.dz-image-preview.ui-sortable-handle",
type: 'image/jpeg',
accepted: true,
status: "queued",
upload: {
chunked: false,
filename: "{{$project->name}}",
totalChunkCount: 1,
progress: 0
},
id: {{$image->id}}
};
dp.emit("addedfile", currentFile);
dp.emit("thumbnail", currentFile, "/uploads/{{$image->file}}");
dp.files.push(currentFile);
dp.emit("complete", currentFile);
@endforeach
// Add these to the queue
dp.QUEUED = [];
dp.QUEUED.push(dp.files);
document.querySelector('.submit-project').addEventListener('click', function(e) {
// If there are any queued files in the dropzone start using the javascript implementation
e.preventDefault();
// If there are any errors displayed about the form validation from the previous submit, remove it and set new ones
var errorsDisplayed = document.querySelector('.project-validation-errors');
if(errorsDisplayed) {
errorsDisplayed.remove();
}
// Validate the form
var bool = validateForm();
// If the form validates, process the queue
if(bool) {
dp.processQueue();
}
});
dp.on("sending", function(file, xhr, formData) {
formData.append("title", mydropzone.projectTitle);
formData.append("body", mydropzone.projectBody);
formData.append("project_name", mydropzone.projectName);
formData.append("project_url", mydropzone.projectUrl);
formData.append("project_category", mydropzone.projectCat);
formData.append("project_skills", mydropzone.projectSkills);
});
dp.on("addedfile", function(file) {
console.log(dp.QUEUED);
var element = document.querySelector('.project-dropzone p');
if(element) {
element.remove();
}
});
dp.on("success", function() {
// window.location.href = "";
});
var validateForm = function() {
var errors = [];
var projectTitle, projectBody, projectName, projectUrl, projectCat, projectSkills;
mydropzone.projectTitle = document.querySelector('.project-title').value;
if(mydropzone.projectTitle == "") {
errors.push('There is no project title');
}
mydropzone.projectBody = document.querySelector('.project-body').value;
if(mydropzone.projectBody == "") {
errors.push('There is no project body text');
}
mydropzone.projectName = document.querySelector('.project-name').value;
if(mydropzone.projectName == "") {
errors.push('There is no project name');
}
mydropzone.projectUrl = document.querySelector('.project-url').value;
if(mydropzone.projectUrl == "") {
errors.push('There is no project URL');
}
mydropzone.projectCat = document.querySelector('.project-cat').value;
if(mydropzone.projectCat == "") {
errors.push('There are no project categories');
}
mydropzone.projectSkills = document.querySelector('.project-skills').value;
if(mydropzone.projectSkills == "") {
errors.push('There are no project skills');
}
// If there are no validation errors
if(errors.length == 0) {
return true;
}
else {
// Display the errors
var html = "<div class='alert alert-danger clearfix project-validation-errors'><ul class='m-0 pl-3'>";
for(i = 0; i < errors.length; i++) {
html += "<li>"+errors[i]+"</li>";
}
html += "</div>";
document.querySelector('.page-title').insertAdjacentHTML('afterend', html);
}
};
}
});
</script>
В добавленном файле я могу console.log(dp.QUEUED)
, который показывает, как файл выглядит в объекте QUEUED, когдавы добавляете его:
[Array(3)]
0: Array(3)
0:
accepted: true
id: 3
name: "20190125-unnamed-man4.jpg"
previewElement: div.dz-preview.dz-complete.dz-image-preview.ui-sortable-handle
previewTemplate: div.dz-preview.dz-complete.dz-image-preview.ui-sortable-handle
status: "queued"
type: "image/jpeg"
upload: {chunked: false, filename: "", totalChunkCount: 1, progress: 0}
_removeLink: a.dz-remove
__proto__: Object
1: {name: "26055793_10154858018501652_2836007284381890198_n.jpg", previewElement: div.dz-preview.dz-complete.dz-image-preview.ui-sortable-handle, previewTemplate: div.dz-preview.dz-complete.dz-image-preview.ui-sortable-handle, type: "image/jpeg", accepted: true, …}
2: File(58227)
accepted: true
dataURL: "data:image/jpeg;base64,/9j/4gIcSUNDX1BST0ZJTEUAAQE"
height: 720
lastModified: 1545932196105
lastModifiedDate: Thu Dec 27 2018 17:36:36 GMT+0000 (Greenwich Mean Time) {}
name: "26055793_10154858018501652_2836007284381890198_n.jpg"
previewElement: div.dz-preview.dz-image-preview
previewTemplate: div.dz-preview.dz-image-preview
size: 58227
status: "queued"
type: "image/jpeg"
upload: {uuid: "d66814d9-aae5-4bfd-bcd6-c1e4a500913d", progress: 0, total: 58227, bytesSent: 0, filename: "26055793_10154858018501652_2836007284381890198_n.jpg", …}
webkitRelativePath: ""
width: 960
_removeLink: a.dz-remove
__proto__: File
length: 3
__proto__: Array(0)
length: 1
__proto__: Array(0)
Итак, 0 & 1 - это файлы, автоматически загружаемые с сервера, а 2 - это файл, который я поместил.
Я не понимаю, как отброшенов файле начинается с файла (58227), а затем проходит через свойства объектов, такие как принятый, имя файла и т. д.?Я неправильно устанавливаю объект файла?Или я как-то не правильно подхожу к нему в контроллере?
Еще один ответ на этот вопрос и другой способ помочь мне - если бы у кого-то был опыт ручного добавления изображения в dropzone, потому что я смотрелв коде dropzone есть такие функции, как add file, enqueueFile.
Когда файл отбрасывается в области dropzone, класс, очевидно, делает что-то, что может быть инициировано вручную, вызывая нужные классы.
Приветствия