2011-02-18 24 views
0

我想用Django後端使用YUI3上傳。然而,在前端編寫一個簡單的上傳器之後,我發現view.py中的函數從未在Django中調用過。而且,我在瀏覽器和後端日誌中沒有看到任何錯誤消息或警告..

上傳者需要時,我確實返回了相應的crossdomain.xml。

有人有YUI3上傳者和Django的成功經驗嗎?我的程序有什麼問題?謝謝!有人用Django成功運行YUI3上傳器嗎?

+0

我已經看到它的工作。也許分享一些代碼可以幫助其他人爲您提供一些有關您遇到的問題的見解? – apiguy 2011-02-18 06:30:05

回答

0

HTML片段:

<head> 
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}photos/css/upload.css" /> 
<script type="text/javascript" src="{{ MEDIA_URL }}js/lib/yui.min.js"></script> 
<script type="text/javascript" src="{{ MEDIA_URL }}photos/js/upload.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     var pu = new PhotosUploader(); 
     pu.render(); 
    }); 
</script> 
</head> 

<body> 
<h3>Upload photos</h3> 
<div id="upload-box" class="upload-box"> 
    <div id="uploader-box"> 
     <div id="uploader-overlay" style="position:absolute; z-index:2"></div> 
     <div id="select-photos-box" style="z-index:1"> 
      <a id="select-photos-a" href="#">Select JPEG photos</a> 
     </div> 
    </div> 
    <div id="upload-photos-a"> 
     <a id="upload-a" href="#">Upload photos</a> 
    </div> 
    <div id="files"> 
     <table id="filenames"> 
     <tr><td>Filename</td><td>File size</td><td>Percent uploaded</td></tr> 
     </table> 
    </div> 
</div> 
</body> 

的crossdomain.xml:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> 
<cross-domain-policy> 
    <allow-access-from domain="yui.yahooapis.com"/> 
    <allow-access-from domain="www.mysite.com"/> 
    <site-control permitted-cross-domain-policies="master-only"/> 
</cross-domain-policy> 

JS:

function PhotosUploader() { 
    var self = this; 

    self.render = function() { 
     YUI().use("uploader", function(Y) { 
      var uploader; 
      Y.on("domready", init); 

      function init() { 
       var overlayRegion = Y.one("#select-photos-a").get('region'); 
       Y.log(overlayRegion); 
       Y.one("#uploader-overlay").set("offsetWidth", overlayRegion.width); 
       Y.one("#uploader-overlay").set("offsetHeight", overlayRegion.height); 

       uploader = new Y.Uploader({boundingBox:"#uploader-overlay"}); 

       uploader.on("uploaderReady", setupUploader); 
       uploader.on("fileselect", fileSelect); 
       uploader.on("uploadprogress", updateProgress); 
       uploader.on("uploadcomplete", uploadComplete); 

       Y.one("#upload-photos-a").on("click", uploadFile); 
      } 

      function setupUploader(event) { 
       uploader.set("multiFiles", true); 
       uploader.set("simLimit", 3); 
       uploader.set("log", true); 

       var fileFilters = new Array({description:"Images", extensions:"*.jpg"}); 
       uploader.set("fileFilters", fileFilters); 
      } 

      function fileSelect(event) { 
       Y.log("File was selected, parsing..."); 
       var fileData = event.fileList; 
       for (var key in fileData) { 
        var output = '<tr>\ 
         <td>'+fileData[key].name+'</td>\ 
         <td>'+fileData[key].size+'</td>\ 
         <td><div id="div_'+fileData[key].id+'">0</div></td>\ 
        </tr>'; 
        Y.one("#filenames").append(output); 
       } 
      } 

      function updateProgress(event) { 
       $('#div_'+event.id).text(Math.round(100 * event.bytesLoaded/event.bytesTotal)); 
      } 

      function uploadComplete(event) { 
       $('#div_'+event.id).text(100); 
      } 

      function uploadFile(event) { 
       uploader.uploadAll('http://www.mysite.com/api/photos/uploaded/'); 
      } 
     }); 
    }; 
} 

Django的後端:

# The function for http://www.mysite.com/api/photos/uploaded/ 
# I'm sure the there's nothing wrong with urls.py 
def uploaded(request): 
    log_dev('photos.uploaded invoked') # IT HAS NEVER BEEN INVOKED... 
    return wrap_json(0) 
相關問題