如何獲取帶有FileField的表單,其中上傳的文件不會被保存,而是其文本內容將被提取並顯示?使用Django顯示上傳文件的內容(而不是保存)
3
A
回答
9
文檔:http://docs.djangoproject.com/en/dev/topics/http/file-uploads/
短版:
- 你上傳表單需要有一個
forms.FileField
場。 - 當表單提交後,它會轉到一個URL,該URL轉到您寫入的查看函數。該視圖函數需要
HttpRequest
(通常名爲request
)。 - 從
request.FILES[]
獲取文件。
例如,如果您的形式有:
upFile = forms.FileField
那麼你的觀點可以得到該文件與:
def uploadView(request):
upFile = request.FILES["upFile"]
其中upFile
是一個UploadedFile
對象,這是不一個類似文件的對象。一個UploadedFile
具有以下屬性:
name
:名稱上傳文件size
的:字節大小
和下面的方法:
read()
:閱讀整個文件並以字符串形式返回。可能對你有好處,但不建議超過2.5 MB的文件。如果該文件應該作爲多個塊處理,則返回True
。chunks()
:返回一個生成器(使用它像一個迭代器),它一次返回一個塊的文件數據。
因此,持續的例子,如果你只是想將文件保存到磁盤,你可以寫:
outFile = open("/tmp/uploadTest.txt", "w")
if not upFile.multiple_chunks():
outFile.write(upFile.read())
else:
for chunk in upFile.chunks():
outFile.write(chunk)
outFile.close()
在你的情況,你很可能只是顯示錯誤信息,並丟棄文件如果multiple_chunks()
返回True
,因爲您可能不打算在您的頁面上放置超過2.5 MB的文本。
編輯:嗯,你的問題完全改變,而我正在寫我的答案。所以,闡明如何把文件內容的頁面,並假設該文件不超過2.5 MB,您的視圖功能可能看起來像:
def uploadView(request):
upFile = request.FILES["upFile"]
context = {}
if upFile.multiple_chunks():
context["uploadError"] = "Uploaded file is too big (%.2f MB)." % (upFile.size,)
else:
context["uploadedFile"] = upFile.read()
return render_to_response('fileUploadPage.html', context)
增加,當然,任何其他視圖處理需要。
然後你fileUploadPage.html
模板需要有地方:
<div id="uploaded">
{% if uploadError %}
<span class="error">{{ uploadError }}</span>
{% else %}
{{ uploadedFile }}
{% endif %}
</div>
編輯2:多米尼克好點。以下是用於正確設置form
標籤的通用模板代碼。使用這個方法有一個形式的模板:
<form method="post" action="{% url uploadFile %}"
{% if form.is_multipart %}
enctype="multipart/form-data"
{% endif %}>
{{ form }}
</form>
在你的情況,因爲你知道的形式將在這一個文件,你可以失去的if
塊:
<form method="post" action="{% url uploadFile %}" enctype="multipart/form-data">
{{ form }}
</form>
注意: {% url ___ %}
命令將放入視圖或命名URL的URL中。該參數是視功能的任何名稱爲您urls.py
文件中使用,或給予url
對象的名稱,例如:在約`enctype`的``
相關問題
- 1. Django顯示上傳文件內容
- 2. 使用上傳的文件,而不是本地文件讀取內容
- 3. 上傳文件而不保存它
- 4. 將excel數據上傳到django中而不保存文件
- 5. Django文件上傳不顯示
- 6. 顯示[內容]而不是實際內容的郵件
- 7. 獲取上傳文件的內容而不存儲它
- 8. 保存文件提示而不是FileWriteAllBytes
- 9. 顯示指向文件的鏈接而不是實際內容
- 10. 獲取用戶在保存前上傳的文件內容
- 11. Django inclusion_tag內容不顯示
- 12. 獲取變量中的縮略圖內容而不是保存在文件上
- 13. 使用PyImgur上傳上傳的圖片而不保存到臨時文件
- 14. 使用文件上傳從內存中顯示圖像
- 15. django問題上傳和保存文件
- 16. 文件上傳保存在Django管理
- 17. 上傳文件到SQL Server而不使用太多內存
- 18. 用ajax上傳txt文件的顯示內容
- 19. Django ImageField/FileField使用模型的pk保存上傳的文件
- 20. Gridview到Excel文件 - 保存輸出,而不是顯示它
- 21. 如何在文件搜索時顯示文件內容而不是文件名
- 22. 顯示pdf而不保存?
- 23. 顯示內容而不是內容的網頁源代碼
- 24. 保存上傳的文件 - 使用
- 25. 將繪圖保存爲圖像文件,而不是使用Matplotlib顯示它
- 26. 傳遞「文件內容」而不是「文件位置」
- 27. 獲取slideToggle()直接顯示上面的內容,而不是下面的內容?
- 28. 使用tcpdf的phpExcel編寫器在屏幕上顯示二進制內容而不保存提示
- 29. 在MongoDB GridFS中存儲上傳的文件使用mgo不保存到內存
- 30. Ruby:顯示內存中的HTML文件而不將其保存到磁盤
你能添加的東西?保存OP運行時遇到麻煩! – 2010-04-26 13:45:35
@Mike D.--我重寫了這個問題 - 我不認爲*我改變了意思,只是希望更容易解析。 – 2010-04-26 13:54:21
這看起來不像一個非常「短」的版本... – 2010-04-27 01:25:38