# File對象 #
`django.core.files`模塊及其子模塊包含了一些用于基本文件處理的內建類。
## File類 ##
`class File(file_object)`
`File` 類是Python [file 對象](https://docs.python.org/3/glossary.html#term-file-object)的一個簡單封裝,并帶有Django特定的附加功能。需要表示文件的時候,Django內部會使用這個類。
File對象擁有下列屬性和方法:
`name`
含有`MEDIA_ROOT`相對路徑的文件名稱。
`size`
文件的字節數。
`file`
這個類所封裝的,原生的[file 對象](https://docs.python.org/3/glossary.html#term-file-object)。
`mode`
文件的讀寫模式。
`open([mode=None])`
打開或者重新打開文件(同時會執行`File.seek(0)`)。 `mode`參數的值和Python內建的`open()`相同。
重新打開一個文件時,無論文件原先以什么模式打開,`mode`都會覆蓋;`None`的意思是以原先的模式重新打開。
`read([num_bytes=None])`
讀取文件內容。可選的`size`參數是要讀的字節數;沒有指定的話,文件會一直讀到結尾。
`__iter__()`
迭代整個文件,并且每次生成一行。
```
Changed in Django 1.8:
File現在使用[通用的換行符](https://www.python.org/dev/peps/pep-0278)。以下字符會識別為換行符:Unix換行符'\n',WIndows換行符'\r\n',以及Macintosh舊式換行符'\r'。
```
`chunks([chunk_size=None])`
迭代整個文件,并生成指定大小的一部分內容。`chunk_size`默認為64 KB。
處理大文件時這會非常有用,因為這樣可以把他們從磁盤中讀取出來,而避免將整個文件存到內存中。
`multiple_chunks([chunk_size=None])`
如果文件足夠大,需要按照提供的`chunk_size`切分成幾個部分來訪問到所有內容,則返回`True` 。
`write([content])`
將指定的內容字符串寫到文件。取決于底層的儲存系統,寫入的內容在調用`close()`之前可能不會完全提交。
`close()`
關閉文件。
除了這些列出的方法,`File`暴露了 `file` 對象的以下屬性和方法:`encoding`, `fileno`, `flush`, `isatty`, `newlines`, `read`, `readinto`, `readlines`, `seek`, `softspace`, `tell`, `truncate`, `writelines`, `xreadlines`。
## ContentFile類 ##
`class ContentFile(File)[source]`
`ContentFile`類繼承自`File`,但是并不像`File`那樣,它操作字符串的內容(也支持字節集),而不是一個實際的文件。例如:
```
from __future__ import unicode_literals
from django.core.files.base import ContentFile
f1 = ContentFile("esta sentencia está en espa?ol")
f2 = ContentFile(b"these are bytes")
```
## ImageFile類 ##
`class ImageFile(file_object)[source]`
Django特地為圖像提供了這個內建類。`django.core.files.images.ImageFile`繼承了 `File`的所有屬性和方法,并且額外提供了以下的屬性:
`width`
圖像的像素單位寬度。
`height`
圖像的像素單位高度。
## 附加到對象的文件的額外方法 ##
任何關聯到一個對象(比如下面的`Car.photo`)的`File`都會有一些額外的方法:
`File.save(name, content[, save=True])`
以提供的文件名和內容保存一個新文件。這樣不會替換已存在的文件,但是會創建新的文件,并且更新對象來指向它。如果`save`為`True`,模型的`save()`方法會在文件保存之后調用。這就是說,下面兩行:
```
>>> car.photo.save('myphoto.jpg', content, save=False)
>>> car.save()
```
等價于:
```
>>> car.photo.save('myphoto.jpg', content, save=True)
```
要注意`content`參數必須是`File`或者 `File`的子類的實例,比如`ContentFile`。
`File.delete([save=True])`
從模型實例中移除文件,并且刪除內部的文件。如果`save`是`True`,模型的`save()` 方法會在文件刪除之后調用。
> 譯者:[Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html),原文:[File objects](https://docs.djangoproject.com/en/1.8/ref/files/file/)。
>
> 本文以 [CC BY-NC-SA 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/cn/) 協議發布,轉載請保留作者署名和文章出處。
>
> [Django 文檔協作翻譯小組](http://python.usyiyi.cn/django/index.html)人手緊缺,有興趣的朋友可以加入我們,完全公益性質。交流群:467338606。
- 新手入門
- 從零開始
- 概覽
- 安裝
- 教程
- 第1部分:模型
- 第2部分:管理站點
- 第3部分:視圖和模板
- 第4部分:表單和通用視圖
- 第5部分:測試
- 第6部分:靜態文件
- 高級教程
- 如何編寫可重用的應用
- 為Django編寫首個補丁
- 模型層
- 模型
- 模型語法
- 元選項
- 模型類
- 查詢集
- 執行查詢
- 查找表達式
- 模型的實例
- 實例方法
- 訪問關聯對象
- 遷移
- 模式編輯器
- 編寫遷移
- 高級
- 管理器
- 原始的SQL查詢
- 聚合
- 多數據庫
- 自定義查找
- 條件表達式
- 數據庫函數
- 其它
- 遺留的數據庫
- 提供初始數據
- 優化數據庫訪問
- 視圖層
- 基礎
- URL配置
- 視圖函數
- 快捷函數
- 裝飾器
- 參考
- 內建的視圖
- TemplateResponse 對象
- 文件上傳
- 概覽
- File 對象
- 儲存API
- 管理文件
- 自定義存儲
- 基于類的視圖
- 概覽
- 內建顯示視圖
- 內建編輯視圖
- API參考
- 分類索引
- 高級
- 生成 CSV
- 生成 PDF
- 中間件
- 概覽
- 內建的中間件類
- 模板層
- 基礎
- 面向設計師
- 語言概覽
- 人性化
- 面向程序員
- 表單
- 基礎
- 概覽
- 表單API
- 內建的Widget
- 高級
- 整合媒體
- 開發過程
- 設置
- 概覽
- 應用程序
- 異常
- 概覽
- django-admin 和 manage.py
- 添加自定義的命令
- 測試
- 介紹
- 部署
- 概述
- WSGI服務器
- 部署靜態文件
- 通過email追蹤代碼錯誤
- Admin
- 管理操作
- 管理文檔生成器
- 安全
- 安全概述
- 說明Django中的安全問題
- 點擊劫持保護
- 加密簽名
- 國際化和本地化
- 概述
- 本地化WEB UI格式化輸入
- “本地特色”
- 常見的網站應用工具
- 認證
- 概覽
- 使用認證系統
- 密碼管理
- 日志
- 分頁
- 會話
- 數據驗證
- 其它核心功能
- 按需內容處理
- 重定向
- 信號
- 系統檢查框架