2009-10-16 5 views
0

파일을 업로드하는 데 필요한 약간의 dojo로 고민하고 있습니다. 이제 파일 업로드 양식은 도조 대화 상자 내에 위치하므로 사용자가 '파일 업로드'버튼을 선택할 때까지 숨겨집니다.젠드 프레임 워크 문제를 사용하여 dojo 파일 업로드

이 버튼은 사이트의 아무 곳이나 클릭 할 수 있으므로 업로드를 처리 할 컨트롤러를 만들었습니다. 순간

나는 그냥 일을 얻기 위해 노력하고, 내 머리 스크립트에서 나는 다음과 같은 한 다음 기본 업로드와

<?php $this->headScript()->captureStart(); ?> 
function sendForm(){ 

    //Hide the file input field 
    dojo.style('inputField',"display","none"); 

    //Show the progress bar 
    dojo.style('progressField',"display","inline"); 
    dojo.byId('preamble').innerHTML = "Uploading ..."; 

    dojo.io.iframe.send({ 
     url: "<?php echo $this->baseUrl(); ?>/fileprocssing/loadfile/", 
     method: "post", 
     handleAs: "text", 
     form: dojo.byId('StartFrm'), 
     handle: function(data,ioArgs){ 
      var fileData = dojo.fromJson(data);     
      if (fileData.status == "success"){ 
       //Show the file input field 
       dojo.style(dojo.byId('inputField'),"display","inline"); 
       dojo.byId('fileInput').value = ''; 

       //Hide the progress bar 
       dojo.style(dojo.byId('progressField'),"display","none"); 
       dojo.byId('uploadedFiles').innerHTML += "success: File: " + fileData.details.name 
        + " size: " + fileData.details.size +"<br>"; 
       dojo.byId('preamble').innerHTML = "File to Upload: "; 
      }else{ 
       dojo.style(dojo.byId('inputField'),"display","inline"); 
       dojo.style(dojo.byId('progressField'),"display","none"); 
       dojo.byId('preamble').innerHTML = "Error, try again: "; 
      } 
     } 
    }); 
} 



<?php $this->headScript()->captureEnd() ?> 

를 같은이

<form id="StartFrm" enctype="multipart/form-data" 
     name="cvupload" 
     action="<?php echo $this->baseUrl();?>/fileprocssing/loadfile/" 
     method="post"> 

    <input type="hidden" name="MAX_FILE_SIZE" value="500000"> 
    <!-- wrapping these in spans to be able to modify 
     parts of this form depending on what the 
     dojo.io.iframe.submit() does --> 

    <span id="preamble">File to Upload:</span><br> 
    <span id="inputField"> 
     <input type="file" id="fileInput" name="uploadFile"> 
    </span> 

    <span id="progressField" style="display:none;"> 
     <div dojoType="dijit.ProgressBar" style="width:200px" indeterminate="true"></div> 
    </span> 

    <br/> 

    <button value="upload" dojoType="dijit.form.Button" 
      onclick="sendForm()">Upload</button> 
</form> 

무엇 JSON 데이터 객체를/fileprocssing/loadfile /에서 가져올 수있는 방법을 알고 싶습니다./somecontroller/someaction /에서 폼을 호출하면 업로드 데이터 정보가 들어 있습니다. 그리고 파일이 자동으로 처리되었을 때 순간/fileprocesing/reviewdata/

같은 뭔가 내가 당분간 JSON 데이터를 손수 한이

public function loadfileAction() { 

    $log = Zend_Registry::getInstance()->get('log'); 

    $log->log('in loadfileaction', Zend_Log::DEBUG); 

    $log->log($_FILES['uploadFile']['name'], Zend_Log::DEBUG); 

    $uploadedFile = array(
     'details' => $_FILES['uploadFile'], 
     'status' => 'success' 
    ); 


    $log->log($fileUploadData->toJson(), Zend_Log::DEBUG); 

    $foo = "{'status':'success',details: {name:'". 
$_FILES['uploadFile']['name']. 
"',size:". 
$_FILES['uploadFile']['size']. 
"}}"; 

    $log->log($foo, Zend_Log::DEBUG); 

    $this->view->fileData = $foo;   


} 

같은 외모를 가지고 작업을 리디렉션 Zend_Dojo_Data를 사용할 것이지만, 지금은이 작업을 얻으려고 노력 중입니다.

내가 dojo를 잘 모른다는 것을 고백해야한다. 그러나 가능한 한 가장 짧은 시간에 내 머리를 쓰려고 노력하고있다.

미리 감사드립니다.

답변

2

dojo.io.iframe.send는 응답 데이터가 TEXTAREA 태그에 랩핑되어야합니다. 이것은 응답 데이터에 성공적으로 액세스하고로드하는 유일한/가장 쉬운 크로스 브라우저 방식이며 요구 사항입니다. 액션에서 일반 JSON을 보내는 것처럼 보입니다.

또한 수 "JSON"와, 그것이 JSON 객체로 여러분에게 전달됩니다 중간 dojo.fromJson (데이터) 호출을 건너 당신의 handleAs을 조정할 수 있습니다

(응답이 상기 TEXTAREA에 싸여 제공)
+0

감사합니다 ... 잠시 나를 성가 시게했습니다 ... –