Chcę wnieść tutaj odpowiedź, ponieważ ja również napotkałem ten sam problem - chcemy, aby element $ _FILES był dostępny jako część tego samego postu jako inny formularz. Moja odpowiedź opiera się na @mrtnmgs, jednak zwraca uwagę na komentarze dodane do tego pytania.
Po pierwsze: Dropzone publikuje swoje dane za pośrednictwem AJAX
Tylko dlatego, że używasz tej formData.append
opcji, nadal oznacza to, że musisz zająć się działaniami UX - tj. To wszystko dzieje się za kulisami i nie jest typowym postem w formularzu. Dane są publikowane w Twoimurl
parametru.
Po drugie: jeśli w związku z tym chcesz naśladować post formularza, będziesz musiał przechowywać opublikowane dane
Wymaga to kodu po stronie serwera do przechowywania $_POST
lub$_FILES
w sesji, która jest dostępna dla użytkownika po załadowaniu innej strony, ponieważ użytkownik nie przejdzie do strony, na której odebrano opublikowane dane.
Po trzecie: musisz przekierować użytkownika na stronę, na której te dane są przetwarzane
Teraz, gdy opublikowałeś swoje dane, zapisałeś je w sesji, musisz wyświetlić / wykonać je dla użytkownika na dodatkowej stronie. Musisz również wysłać użytkownika do tej strony.
Więc dla mojego przykładu:
[Kod Dropzone: używa Jquery]
$('#dropArea').dropzone({
url: base_url+'admin/saveProject',
maxFiles: 1,
uploadMultiple: false,
autoProcessQueue:false,
addRemoveLinks: true,
init: function(){
dzClosure = this;
$('#projectActionBtn').on('click',function(e) {
dzClosure.processQueue(); /* My button isn't a submit */
});
// My project only has 1 file hence not sendingmultiple
dzClosure.on('sending', function(data, xhr, formData) {
$('#add_user input[type="text"],#add_user textarea').each(function(){
formData.append($(this).attr('name'),$(this).val());
})
});
dzClosure.on('complete',function(){
window.location.href = base_url+'admin/saveProject';
})
},
});