Django檔案上傳 -- 適用於單一小檔案上傳

weixin_33858249發表於2017-10-11

首先,在html模版中新增類似下面的程式碼

1
2
3
4
5
<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>

這裡需要注意一下幾點:

  1. form表單彙總一定要有enctype="multipart/form-data"屬性
  2. form需要以POST方式提交
  3. form的Action屬性對應views中處理upload上傳邏輯的函式
  4. 需要有csrf_token這個標籤,否則post無法提交
  5. 第一個<input>的型別為file,這是一個檔案選擇器,name屬性很重要,因為後面通過此欄位取出檔案物件

 

接下來,編寫CGI邏輯

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

宣告:如有轉載本博文章,請註明出處。您的支援是我的動力!文章部分內容來自網際網路,本人不負任何法律責任

本文轉自bourneli部落格園部落格,原文連結:http://www.cnblogs.com/bourneli/archive/2013/01/28/2879574.html,如需轉載請自行聯絡原作者

相關文章