首先,在html模版中添加類似下面的代碼
<form enctype="multipart/form-data" method="POST" action="/view/process/upload/file">
{% csrf_token %}
<input type="file" name="your_file"/>
<input type="submit" value="上傳文件" />
</form>
這里需要注意一下幾點:
- form表單匯總一定要有enctype="multipart/form-data"屬性
- form需要以POST方式提交
- form的Action屬性對應views中處理upload上傳邏輯的函數
- 需要有csrf_token這個標簽,否則post無法提交
- 第一個<input>的類型為file,這是一個文件選擇器,name屬性很重要,因為后面通過此字段取出文件對象
接下來,編寫CGI邏輯
def process_upload_file(request):
# 獲取文件
file_obj = request.FILES.get('your_file', None)
if file_obj == None:
return HttpResponse('file not existing in the request')
# 寫入文件
file_name = 'temp_file-%d' % random.randint(0,100000) # 不能使用文件名稱,因為存在中文,會引起內部錯誤
file_full_path = os.path.join(UPLOAD_ROOT, file_name)
dest = open(file_full_path,'wb+')
dest.write(file_obj.read())
dest.close()
return render_to_response('upload_result.html',{})
取用文件的方式為:“file_obj = request.FILES.get('file', None)”。第一個參數”your_file”對應form中的第一個input標簽。然后,可以通過file_obj.name獲取文件名稱,file_obj.read()方法獲取文件內容。上傳的文件放在內存中,所以此方法只適合小文件上傳。
參考資料:
http://blog.donews.com/limodou/archive/2006/03/23/783974.aspx
