2015-10-26 54 views
1

我正在嘗試檢索文件,然後通過POST提交將其上傳到Parse.com。我的HTML:用Django傳遞文件對象

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
<div class="container"> 
    <form action="" id="fileupload" name="fileupload" enctype="multipart/form-data" method="post"> 
    {% csrf_token %} 
    <fieldset> 
     <input type="file" name="fileselect" id="fileselect" /></input> 
     <input type="hidden" name="myFile" id="myFile" /> 
     <input id="uploadbutton" type="submit" value="Upload to Parse" /> 
    </fieldset> 
    </form> 
</div> 

,並使用以下函數來檢索文件:

<script type="text/javascript"> 
    $(function() { 
    var file; 

    // Set an event listener on the Choose File field. 
    $('#fileselect').bind("change", function(e) { 
     var files = e.target.files || e.dataTransfer.files; 
     // Our file var now holds the selected file 
     file = files[0]; 
     document.getElementById('myFile').value = file; 
    }); 
    }); 
</script> 

但是,這種「MYFILE」字段沒有發佈該文件作爲一個對象,也不與解析API JIVE文檔,它似乎在尋找一個文件路徑名,我不認爲我可以從一臺未知的機器上獲取。

import json,httplib 
connection = httplib.HTTPSConnection('api.parse.com', 443) 
connection.connect() 
connection.request('POST', '/1/files/pic.jpg', open('myPicture.jpg','rb').read(), { 
    "X-Parse-Application-Id": "xxxxxxxxxxxxxxxxxxxxx", 
    "X-Parse-REST-API-Key": "xxxxxxxxxxxxxxxxxxxxxxx", 
    "Content-Type": "image/jpeg" 
}) 
result = json.loads(connection.getresponse().read()) 
print result 

這似乎是它會是一個常見的情況,但我發現的唯一文件是爲阿賈克斯,我寧願不使用,因爲它暴露了我的API證書https://www.parse.com/questions/uploading-files-to-parse-using-javascript-and-the-rest-api

我不確定處理文件的最佳方式是什麼......如果有方法可以在Django框架內處理,或者我需要轉換爲JSON。而且,即使在捕獲文件對象時,我也不清楚如何在文件對象中使用Parse.com API。

回答

0

經過一番研究,事實證明答案非常簡單。從Django的網站使用「基本文件上傳」文件:https://docs.djangoproject.com/en/1.8/topics/http/file-uploads/和解析文檔(在上面的問題中引用)與

request.FILES['file'] 

更換

open('myPicture.jpg', 'rb').read() 

我能成功上傳的文件解析。沒有必要的JavaScript。