2017-09-11 1 views
0

내 기존 양식에 이미지를 저장하기 위해 dropzone.js를 사용하고 있는데, 동시에 이미지를 저장할 수 있습니까? 내 말은, 양식과 같은 요청에 dropzone에 떨어 뜨린 이미지를 보냅니 까?Dropzone.JS는 동일한 요청으로 파일과 양식 데이터를 전송합니다.

 {{ Form::open(array('method'=>'post','class'=> 'ajaxaddevent','url' => 
'/savenewevent', 'enctype' => 'multipart/form-data')) }} 
      <div class="form-group"> 
        <label for="name">Título do Evento</label> 
        <input type="text" id="name" name="name" class="form- 
control" /> 
       </div> 

       <div class="form-group"> 
        <label for="eventtype">Tipo</label> 
        <select class="form-control selecttype" name="eventtype" id="eventtype"> 
         @foreach ($eventtypes as $eventtype) 
          <option value="{{ $eventtype->id }}" > {{ $eventtype->name }} </option> 
         @endforeach 
        </select> 
       </div> 

       <div class="form-group"> 
        <label for="eventsubtype">Sub-tipo</label> 
        <select class="form-control selectsubtypes" name="eventsubtype" id="eventsubtype"> 
         @foreach ($eventsubtypes as $eventsubtype) 
          <option value="{{ $eventsubtype->id }}" > {{ $eventsubtype->name }} </option> 
         @endforeach 
        </select> 
       </div> 

       <div class="form-group"> 
        <label for="eventsubtype">Temas</label> 
        <span class="interest_text">podes escolher mais que um</span> 
        <div class="interests_list submit_event"> 
          @foreach ($themes as $theme)      
           <div> 
            <input type="checkbox" id="theme{{ $theme->id }}" name="themes[]" value="{{ $theme->id }}"/> 
            <label for="theme{{ $theme->id }}"><span></span>{{ $theme->name }}</label> 
           </div> 
          @endforeach 
        </div> 
       </div> 

       <div class="row"> 
        <div class="form-group col-md-6"> 
         <label for="startdate">Data</label> 
         <input type="date" id="startdate" name="startdate" class="form-control" data-country="PT" placeholder="Início"> 
        </div> 
        <div class="form-group col-md-6"> 
         <label for="enddate">&nbsp;</label> 
         <input type="date" id="enddate" name="enddate" class="form-control" data-country="PT" placeholder="Fim"> 
         <span id="adddata" class="adddata">Adicionar mais horas</span> 
        </div> 
       </div> 

       <div class="row"> 
        <div class="form-group col-md-6"> 
         <label for="schedule_start">Horário</label> 
         <input type="date" id="schedule_start" name="schedule_start" class="form-control" data-country="PT" placeholder="Início"> 
        </div> 
        <div class="form-group col-md-6"> 
         <label for="schedule_end">&nbsp;</label> 
         <input type="date" id="schedule_end" name="schedule_end" class="form-control" data-country="PT" placeholder="Fim"> 
         <span id="addschedule" class="addschedule">Adicionar mais horas</span> 
        </div> 
       </div> 

       <div class="form-group"> 
        <label for="duration">Duração</label> 
        <input type="text" id="duration" name="duration" class="form-control" placeholder="Escreve apenas números" /> 
        <div class="duration_tips"> 
         <input type="radio" id="duration_tips_hours" name="duration_tips[]" value="hours" /><label for="duration_tips_hours"><span></span>Horas</label> 
         <input type="radio" id="duration_tips_weeks" name="duration_tips[]" value="weeks" /><label for="duration_tips_weeks"><span></span>Semanas</label> 
         <input type="radio" id="duration_tips_days" name="duration_tips[]" value="days" /><label for="duration_tips_days"><span></span>Dias</label> 
         <input type="radio" id="duration_tips_months" name="duration_tips[]" value="months" /><label for="duration_tips_months"><span></span>Meses</label> 
        </div> 
       </div> 

       <div class="form-group"> 
        <label for="available">Número de vagas</label> 
        <input type="text" id="available" name="available" class="form-control" placeholder="Escreve apenas números" /> 
       </div> 

       <div class="form-group"> 
        <label for="price">Preço</label> 
        <input type="text" id="price" name="price" class="form-control" placeholder="Escreve apenas números" /> 
       </div> 


       <div class="form-group"> 
        <label for="email">E-mail</label> 
        <input type="email" id="email" class="form-control" /> 
       </div> 

       <div class="form-group"> 
        <label for="telemovel">Telemóvel</label> 
        <input type="text" id="telemovel" class="form-control" /> 
       </div> 

       <div class="form-group"> 
        <label for="distrito">Distrito/região</label> 
        <select class="form-control selectdistrict" name="districtID" id="districtID"> 
         @foreach ($districts as $district) 
          <option value="{{ $district->id }}" > {{ $district->name }} </option> 
         @endforeach 
        </select> 
       </div> 

       <div class="form-group"> 
        <label for="concelho">Concelho</label> 
        <select class="form-control selectcounties" name="countyID" id="countyID"> 
         @foreach ($counties as $county) 
          <option value="{{ $county->id }}" > {{ $county->name }} </option> 
         @endforeach 
        </select> 
       </div> 

       <div class="form-group"> 
        <label for="morada">Morada</label> 
        <input type="text" id="morada" class="form-control" /> 
       </div> 
       <div class="row"> 
        <div class="form-group col-md-6"> 
         <label for="freguesia">Freguesia</label> 
         <input type="text" name="parish" id="parish" class="form-control" /> 
        </div> 

        <div class="form-group col-md-6"> 
         <label for="cod_postal">Código Postal</label> 
         <input type="text" id="cod_postal" class="form-control" /> 
        </div> 
       </div> 

       <div class="form-group"> 
        <label for="website">Website</label> 
        <input type="text" id="website" class="form-control" /> 
       </div> 

       <div class="form-group"> 
        <label for="facebook">Facebook</label> 
        <input type="text" name="facebooklink" id="facebook" class="form-control" placeholder="www.facebook.com/" /> 
       </div> 

       <div class="form-group"> 
        <label for="descricao">Descrição</label> 
        <textarea id="description" name="description" class="form-control descricao_anunciante" placeholder="(quem és, o que fazes ou o que representas, temas e tipos de eventos)"></textarea> 
       </div> 

       <div class="dropzone" id="myDropzone"> </div> 

       <button type="submit" id="submit" class="btn btn-primary">GUARDAR DADOS</button> 
       {{Form::close()}} 

Dropzone.options.myDropzone= { 
     url: '/savenewevent', 
     autoProcessQueue: false, 
     uploadMultiple: true, 
     parallelUploads: 5, 
     maxFiles: 5, 
     maxFilesize: 1, 
     acceptedFiles: 'image/*', 
     addRemoveLinks: true, 
     init: function() { 
      dzClosure = this; // Makes sure that 'this' is understood inside the functions below. 

      // for Dropzone to process the queue (instead of default form behavior): 
      document.getElementById("submit").addEventListener("click", function(e) { 
       // Make sure that the form isn't actually being sent. 
       e.preventDefault(); 
       e.stopPropagation(); 
       dzClosure.processQueue(); 
      }); 

      this.on("sendingmultiple", function(data, xhr, formData) { 
       formData.append("name", jQuery("#name").val()); 
       formData.append("eventtype", jQuery("#eventtype").val()); 
       formData.append("eventtype", jQuery("#eventtype").val()); 
       formData.append("eventsubtype", jQuery("#eventsubtype").val()); 
       formData.append("startdate", jQuery("#startdate").val()); 
       formData.append("enddate", jQuery("#enddate").val()); 
       formData.append("schedule_start", jQuery("#schedule_start").val()); 
       formData.append("schedule_end", jQuery("#schedule_end").val()); 
       formData.append("available", jQuery("#available").val()); 
       formData.append("price", jQuery("#price").val()); 
       formData.append("email", jQuery("#email").val()); 
       formData.append("telemovel", jQuery("#telemovel").val()); 
       formData.append("districtID", jQuery("#districtID").val()); 
       formData.append("morada", jQuery("#morada").val()); 
       formData.append("cod_postal", jQuery("#cod_postal").val()); 
       formData.append("website", jQuery("#website").val()); 
       formData.append("facebook", jQuery("#facebook").val()); 
       formData.append("description", jQuery("#description").val()); 
      }); 
     } 
  • (내가 제출을 클릭하고 DROPZONE에서 파일이이 arent 때 나는 위해서 var_dump를했다) 같은 요청에 이미지/파일을 보내기 JS, 어떻게 할 수 나는 그것을 성취합니까? 또 다른 프로그래머가 좋아, 그렇게 할 경우 있도록

또는

내 목적은 파일 이름으로 데이터베이스에 직렬화 된 배열을 저장하는 것입니다.

감사합니다.

+0

var_dump는 무엇을 의미합니까? 서버 측에서 무엇을 사용하고 있습니까? – wallek876

+0

Laravel 5.4, PHP –

+0

지금까지 내가 볼 수있는 것처럼, 모두 똑같아 보인다. 파일과 폼 데이터가 모두 같은 요청으로 서버 측에 나타나야한다. laravel은 어떻게 작동하는지 모르지만, 순수한 PHP에서는 파일이 있어야한다. '$ _FOSES'에있는'$ _FILES'와 양식 데이터 – wallek876

답변

1

이 작업을 수행하려면 dropzone autoProcessQueue을 true로 설정하고 업로드 된 파일 이름을 응답으로 반환하고 양식 입력에 저장할 수 있습니다. 당신이 양식을 제출하는 경우

this.on("success", function (file, response) { 
    $('#hidden_input_id').val(response); 
} 

, 당신은 #hidden_input_id의 이름에서 파일 이름을 얻고 데이터베이스에 그 이름을 저장합니다.

참고 : Dropzone ajax/image 업로드 url과 양식 제출 url은 달라야합니다. 경로가 업로드 된 이미지 파일의 이름을 반환해야 HTML

{{ Form::open(array('method'=>'post','class'=> 'ajaxaddevent','url' => 
'/savenewevent', 'enctype' => 'multipart/form-data')) }} 

<input id="hidden_image_name" name="hidden_image_name" 

<div class="dropzone" id="myDropzone"> </div> 

<button type="submit" id="submit" class="btn btn-primary">GUARDAR DADOS</button> 
{{Form::close()}} 

하고 스크립트 같은

Dropzone.options.myDropzone= { 
    url: '/uploadimage', 
    autoProcessQueue: true, 
    uploadMultiple: true, 
    parallelUploads: 5, 
    maxFiles: 5, 
    maxFilesize: 1, 
    acceptedFiles: 'image/*', 
    addRemoveLinks: true, 
    init: function() { 
     dzClosure = this; // Makes sure that 'this' is understood inside the functions below. 

     // for Dropzone to process the queue (instead of default form behavior): 
     document.getElementById("submit").addEventListener("click", function(e) { 
      // Make sure that the form isn't actually being sent. 
      e.preventDefault(); 
      e.stopPropagation(); 
      dzClosure.processQueue(); 
     }); 

     this.on("success", function (file, response) { 
      $('#hidden_image_name').val(response); 
     } 

    } 
}; 

/uploadimage처럼

샘플 코드 보인다.

/savenewevent 경로에서는 게시 된 PARAMS을 확인 할 수 있습니다 hidden_image_name 해당 이벤트에 이미지 이름 하늘의 맵이 아닌 경우.

+0

고맙습니다. 이해합니다. 하지만 '메모'부분이 어떻게 다른 두 URL을 사용할 수 있습니까? 코드 예제를 줄 수 있습니까? –

관련 문제