1. 程式人生 > >django ImageField,FileField,上傳檔案,命名問題

django ImageField,FileField,上傳檔案,命名問題

django 的models.ImageFiled,FileField有屬性upload_to,該屬性是指定將檔案上傳到伺服器的位置,及儲存在哪個資料夾下,你可以很方便甚至很少的程式碼就可以實現檔案上傳操作了。但是預設的儲存的檔名是沒有改變的,也就是說所儲存的檔名就是你上傳時檔案的本地名,當伺服器資料夾下有相同的檔名時,系統會自動新增下劃線來改變檔名,以保證檔案能順利上傳到伺服器上。當是這樣的檔名十分不美觀,而且很多時候我們喜歡自己定義檔名,甚至動態控制檔案儲存的位置。這樣看上去可能就不那麼容易了。其他django其他的功能也為我們想好了這一點,並且很容易就可以實現你想要的操作。

1. upload_to指定的是檔案儲存的目錄,你可以指定upload_to="/upload/%Y%m",這段的意思是根據當前的年月作為目錄名,將檔案儲存到該資料夾下面,例如,現在是2009年2月,那麼檔案就會儲存在/upload/200902/目錄下面。目錄可以根據日期來改變了,當然如果我不想用日期呢,而且檔名我如何自定義呢?下面看第二點

其中有from django.core.files.storage import default_storage
我們檢視django的原檔案django.core.files.storage

下面定義了Storage和FileSystemStorage,其中FileSystemStorage繼承之Storage,檔案最後有兩句

與前面from django.core.files.storage

import default_storage比較可以發現,

default_storage是我們在settings.py中定義的,也許你在自己專案下面settings.py檔案裡面沒有看到這個屬性,但是我們知道專案下面的settings.py都是繼承之global_settings.py的,再次檢視django原檔案,在django/conf可以看到該檔案,開啟按 Ctrl + F查詢DEFAULT_FILE_STORAGE 就可以看到DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage',也就是預設的Storage了,找到這個我們就找到檔案徹底解決的辦法了,寫一個自己的Storage,來處理自己需要的操作。

因為Storage是基類,而且是“虛類”,我們可以繼承FileSystemStorage,因為該類已經幫我們做好了大部分事情。下面是個簡單的例子---實現上面所說的自定義檔名:

 

OK!其他操作也就是重寫相應的方法來滿足你的需要嘍。

看來,在遇到問題的時候還是要多看看文件,然後看看原程式,看他們是如何實現的,說不定就會有意想不到的想法和發現。

相關推薦

django ImageField,FileField,檔案命名問題

django 的models.ImageFiled,FileField有屬性upload_to,該屬性是指定將檔案上傳到伺服器的位置,及儲存在哪個資料夾下,你可以很方便甚至很少的程式碼就可以實現檔案上傳操作了。但是預設的儲存的檔名是沒有改變的,也就是說所儲存的檔名就是你上傳時

springMVC檔案MultipartHttpServletRequest、MultipartFile進行檔案

這裡使用apache的開源jar包完成上傳功能,使用jar包分別是:common-fileupload.jar和common-io.jar  先編寫上傳檔案幫助類,如果需要區分檔案型別,可以將檔案字尾擷取進行判斷; springmvc-mvc.xml配置,這裡主要配置spri

Django 使用ajax檔案

Django 使用ajax上傳檔案 JSON json指的是JavaScript物件表示法(JavaScript Object Notaion) json是輕量級的文字資料交換格式 json獨立於語言 json具有自我描述性,更易理解 JSON 使用 JavaScript 語法來描述資料物件,但是

使用base64檔案後臺轉為MultipartFile

通常情況下,上傳檔案時,使用的都是file型別。我們再java後臺應用只需要使用MultipartFile接收就可以了。有的時候,或許我們也會遇到使用base64進行檔案上傳。今天,我們一起學習下後臺 應該如何處理這樣的情況。 由於MultipartFile的實現類都不太適用於base64的上傳

spring Boot 檔案10天后不能的bug

起因           公司研發人員 部署服務在阿里雲 ecs 伺服器; 上傳檔案過1周左右檔案自動丟失; 排查思路:     (1).查詢tomcat 啟動日誌出現如下資訊:   

spring mvc --檔案檔案和其他資料一起提交

jsp: var formdata = new FormData(); formdata.append('file', $('#file')[0].files[0]); //上傳檔案 formdata.append('id', $('#id').val(

github二次檔案分支檔案刪除資料夾

看了太多GitHub入門教程,終於搞通了,樂在分享。 部分參考:第一個GitHub專案https://blog.csdn.net/wangyan_z/article/details/79148059 git上傳本地分支到github專案分支  https://blog.csdn.

ajax 檔案post檔案ajax 提交 JSON 格式的資料

ajax簡介 前後臺做資料互動 前後端做資料互動的方式(三種):     (1)瀏覽器視窗輸入地址(get的方式)(2)form表單提交資料(3)ajax提交資料 特點 特點:  (1)非同步       非同步與同步的區別:同步是請求發過去,要等著迴應;非同步不

如何使用objective c檔案用flask接收檔案

flask是python中類似於php的伺服器元件。 ios提供了NSMutableArray和 dataTaskWithRequest用來使用http上傳資料。但是flask只支援基於表單格式的資料。 表單格式是在原始http資料上,提供了額為的資訊。如果直接使用ios的api把資料傳送給

初識flask檔案uwsgi部署

安裝: pip install flask web開發: app.py from flask import Flask,request,make_response from flask import jsonify app = Flask(__name__) UPLOAD_FOL

Java檔案:Restful介面接收檔案快取在本地

介面程式碼 import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.Requ

前端檔案二進位制流存入資料庫

html: <input type="file" name="files" id="btnfile"/> JS: $('input[type=file]').on("change", function () {  var files = this.files[0];  var FileName =

python傳送post請求檔案無法解析檔案

前言 近日,在做介面測試時遇到一個奇葩的問題。 使用post請求直接通過介面上傳檔案,無法識別檔案。 遇到的問題 以下是抓包得到的資訊: 以上請求是通過Postman直接傳送請求的。 在這裡可以看到訊息頭裡包含:Access-Token和Content-Type 因此在在使用python直接

MVC Api微信小程式wx.uploadFile檔案前後端程式碼例項

// 小程式端js Page({ /** * 頁面的初始資料 */ data: { userHeaderImage: "../../../images/1.jpg" }

winform檔案利用httpform-data格式

/// <summary> /// 上傳檔案 /// </summary> /// <param name="url">服務地址</param> /// <param name="filePath">檔案路徑</param> public

Android WebView嵌入H5之file頭像檔案適配所有版本

 最近公司需要開發新的專案,為了節省時間成本,要求整體嵌入H5介面。對,沒看錯是整體嵌入,心中一萬隻草泥馬奔騰,沒辦法大佬就是大佬,還是的照做。 今天來說說h5上傳頭像的問題吧。網上有很多的解決方案,開始我覺得好像很簡單,都有成功案例,等把程式碼copy下來,發現並不能執

Python Flask檔案request.files

  demo.py(上傳檔案): # coding:utf-8 from flask import Flask, request # 匯入request物件 app = Flask(__name__) @app.route("/upload", methods=["PO

HTML5 jQuery+FormData 非同步檔案帶進度條

利用jQuery和html5的FormData非同步上傳檔案的好處是: 實現很簡單很方便地支援進度條很方便地進行擴充套件和美化 先看看效果圖: 圖片上傳後的結果: 實現步驟如下: 第二步:上傳頁面的html程式碼: [html] view plain

檔案解壓zip

 前臺使用layui官方上傳檔案例子: <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title&

servlet 檔案下載檔案響應頭部設定

使用apache的開源jar編寫 編寫檔案上傳幫助類 /** * 檔案上傳幫助類 * * @author ajie * */ public class FileUploadUtil { /** * 建立資料夾