激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Django實現(xiàn)任意文件上傳(最簡單的方法)

Django實現(xiàn)任意文件上傳(最簡單的方法)

2020-06-04 10:00聽風(fēng)。 Python

這篇文章主要介紹了Django實現(xiàn)任意文件上傳,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

利用Django實現(xiàn)文件上傳并且保存到指定路徑下,其實并不困難,完全不需要用到django的forms,也不需要django的models,就可以實現(xiàn),下面開始實現(xiàn)。

第一步:在模板文件中,創(chuàng)建一個form表單,需要特別注意的是,在有文件上傳的form表單中,method屬性必須為post,而且必須指定它的enctype為"multipart/form-data",表明不對字符進行編碼,具體的代碼如下:

?
1
2
3
4
5
<form enctype="multipart/form-data" action="/uploadFile/" method="post">
  <input type="file" name="myfile" />
  <br/>
  <input type="submit" value="upload"/>
</form>

Django實現(xiàn)任意文件上傳(最簡單的方法)

第二步:設(shè)置urls.py文件,指定相應(yīng)的視圖函數(shù)進行處理

第三步:最重要的,在視圖函數(shù)中做處理,先把代碼貼出來,一共就這么點,可以實現(xiàn)任何格式文件的上傳

?
1
2
3
4
5
6
7
8
9
10
def upload_file(request):
  if request.method == "POST"# 請求方法為POST時,進行處理
    myFile =request.FILES.get("myfile", None# 獲取上傳的文件,如果沒有文件,則默認為None
    if not myFile:
      returnHttpResponse("no files for upload!")
    destination = open(os.path.join("E:\\upload",myFile.name),'wb+'# 打開特定的文件進行二進制的寫操作
    for chunk in myFile.chunks():   # 分塊寫入文件
      destination.write(chunk)
    destination.close()
    returnHttpResponse("upload over!")

代碼就是上面這些。

這里需要對上面視圖函數(shù)中的代碼進行詳細的解釋一番:

首先,對于上傳的文件,雖然是通過POST的方式上傳的,但是不能通過request.POST["myfile"]或者request.POST.get("myfile", None),這兩種方式來訪問,這里需要使用另外一種方式,就是:

?
1
request.FILES["myfile"]或者request.FILES.get("myfile", None)

因為上傳的文件是保存在FILES這個字典中的,可以在if request.method =="POST"之前加上一句assert False,再運行瀏覽器,就可以看到結(jié)果。

Django實現(xiàn)任意文件上傳(最簡單的方法)

接下來,需要判斷用戶是不是真的上傳了文件,如果用戶僅僅只是點了 一下upload按鍵,那么就提示他沒有上傳文件。

下面是最重要的部分,現(xiàn)在已經(jīng)得到了文件了,但是文件在內(nèi)存中,沒有寫到硬盤里面去,接下里需要完成的就是把文件寫入到硬盤,那到底該怎么寫,我看了很多人的博客,寫的云里霧里的,都沒有說清楚,把我搞糊涂了。

其實上傳文件,就是把硬盤里面某個文件的數(shù)據(jù),寫入到服務(wù)器指定的文件中,在最底層不管是txt文件還是exe文件等,全都是二進制的數(shù)據(jù),這里所要做的只是將已經(jīng)上傳了的文件的數(shù)據(jù),以二進制的方式寫入到服務(wù)器指定的文件中,這個文件可以隨意命名。

比如可以將上傳的123.exe文件,保存為abc.txt,但是這毫無意義,對于上傳的123.exe,在服務(wù)器上也應(yīng)該是123.exe。其實在這里所說的abc.txt和123.exe的內(nèi)容是完全一樣的,只需要將abc.txt的文件后綴改為exe就行了。

在進行進一步的代碼解釋之前,需要先講幾個關(guān)于上傳文件的方法和屬性:

    myFile.read():從文件中讀取整個上傳的數(shù)據(jù),這個方法只適合小文件;

    myFile.chunks():按塊返回文件,通過在for循環(huán)中進行迭代,可以將大文件按塊寫入到服務(wù)器中;

   myFile.multiple_chunks():這個方法根據(jù)myFile的大小,返回True或者False,當myFile文件大于2.5M(默認為2.5M,可以調(diào)整)時,該方法返回True,否則返回False,因此可以根據(jù)該方法來選擇選用read方法讀取還是采用chunks方法:

?
1
2
3
4
if myFile.multiple_chunks() == False:
  # 使用myFile.read()
 else:
  # 使用myFile.chunks()

   myFile.name:這是一個屬性,不是方法,該屬性得到上傳的文件名,包括后綴,如123.exe;

   myFile.size:這也是一個屬性,該屬性得到上傳文件的大小。

接下來的一行代碼是:

?
1
destination = open(os.path.join("E:\\upload",myFile.name), 'wb+')

這一行代碼需要用到os模塊,import os。對于os.path.join("E:\\upload", myFile.name),如果上傳的文件為123.exe,那么將得到E:\\upload\\123.exe這個路徑,以寫二進制的方式打開這個文件。接下來是分塊寫入數(shù)據(jù):

?
1
2
3
for chunk in myFile.chunks():   # 分塊寫入文件
 
  destination.write(chunk)

數(shù)據(jù)寫完之后關(guān)閉文件就可以了,destination.close()。

首先選擇文件:

Django實現(xiàn)任意文件上傳(最簡單的方法)

點擊upload,顯示upload over!

查看指定目錄下是否有相應(yīng)的上傳文件:

Django實現(xiàn)任意文件上傳(最簡單的方法)

到此這篇關(guān)于Django實現(xiàn)任意文件上傳(最簡單的方法)的文章就介紹到這了,更多相關(guān)Django 任意文件上傳內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/huchong/p/7910131.html#navigator

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九综合九九 | 亚洲成人免费视频在线 | 国产成人在线视频 | 成人午夜视频免费在线观看 | 最新中文字幕在线 | 中国久久久 | 在线看一区二区三区 | 国产瑟瑟视频 | 亚洲二区免费 | 国产亚洲综合一区二区 | 国产一区免费观看 | 一级视频片 | 国产精品久久久久久久久久久久午夜 | 久久网一区二区 | 九九午夜| 欧美人与牲禽动交精品一区 | 91在线精品亚洲一区二区 | 成人在线观看免费观看 | 成人免费一区二区三区视频网站 | 欧美日韩国产一区二区三区在线观看 | 日日草夜夜 | 久国产精品视频 | 操嫩草| 国产精品久久久久久久av三级 | 免费黄色大片网站 | 国产午夜亚洲精品午夜鲁丝片 | 免费观看的毛片手机视频 | 日韩在线视频在线观看 | 欧美日韩一区,二区,三区,久久精品 | 日韩字幕在线观看 | 欧美日韩精品一区二区三区在线观看 | 一级黄片毛片免费看 | 日本一级黄色毛片 | 97se亚洲综合在线韩国专区福利 | 91网站链接 | 成人欧美在线观看 | 销魂美女一区二区 | 国产亚洲欧美视频 | 精品国产乱码久久久久久丨区2区 | 娇喘在线 | 性生大片免费观看一片黄动漫 |