Flask-Admin 做web檔案伺服器
之前用python -m SimpleHTTPServer 命令快速起一個webserver還是覺得很好用的,但是缺少upload 的功能頗感遺憾。 最近研究Flask-Admin 的時候發現有個 FileAdmin的class,挺適合做檔案伺服器的。
Flask-Admin github: https://github.com/flask-admin/flask-admin
安裝flask-admin命令:
pip install flask-admin
程式碼如下:
from flask_admin.contrib.fileadmin import FileAdmin
from flask_admin import Admin
from flask import Flask
import os
from flask_script import Shell, Manager
app=Flask(__name__)
# get base location of current file
basedir=os.path.abspath(os.path.dirname(__file__))
# app configuration
app.config['SECRET_KEY']='!@$RFGAVASDGAQQQ'
admin = Admin(app, name='File', template_mode='bootstrap3')
path=os.path.join(basedir, 'static')
admin.add_view(FileAdmin(basedir, name='Static Files'))
manager = Manager(app)
manager.run()
略微有個小遺憾,在顯示檔案只有Name 和Size,並沒有檔案的修改時間。我看了下原始碼, 發現get_files
函式其實是有收集修改時間的 op.getmtime(fp)
,只是沒有暴露出來
def get_files(self, path, directory):
"""
Gets a list of tuples representing the files in the `directory`
under the `path`
:param path:
The path up to the directory
:param directory:
The directory that will have its files listed
Each tuple represents a file and it should contain the file name,
the relative path, a flag signifying if it is a directory, the file
size in bytes and the time last modified in seconds since the epoch
"""
items = []
for f in os.listdir(directory):
fp = op.join(directory, f)
rel_path = op.join(path, f)
is_dir = self.is_dir(fp)
size = op.getsize(fp)
last_modified = op.getmtime(fp)
items.append((f, rel_path, is_dir, size, last_modified))
return items
修改list.html 加入一行即可
<table class="table table-striped table-bordered model-list">
<thead>
<tr>
{% block list_header scoped %}
{% if actions %}
<th class="list-checkbox-column">
<input type="checkbox" name="rowtoggle" class="action-rowtoggle" />
</th>
{% endif %}
<th class="col-md-1"> </th>
<th>{{ _gettext('Name') }}</th>
<th>{{ _gettext('Size') }}</th>
<th>{{ _gettext('Date') }}</th>
{% endblock %}
</tr>
</thead>
...
<td>
{{ size|filesizeformat }}
</td>
<td>
{{date|datetime}}
</td>
其中 <th>{{ _gettext('Date') }}</th>
和 {{date|datetime}}
是我手動新增的 。 用到了一個customized datetime的filter,因為last_modified = op.getmtime(fp)
返回的是一個float型別變數,需要進行轉換成更可讀的時間, 程式碼如下
def format_datetime(value):
"""
define a filters for jinjia2 to format the unix timestamp (float) to humman readabl
"""
return datetime.fromtimestamp(value).strftime('%Y-%m-%d %H:%M:%S')
#set the filter we just created
env = app.jinja_env
env.filters['datetime'] = format_datetime
如何通過curl 命令上傳檔案到這個webserver上呢,可以參考下面的例子curl -F "upload=@c:\b.txt" http://localhost:5000/admin/fileadmin/upload/
相關文章
- 向web伺服器下載檔案Web伺服器
- rsync 做檔案同步
- 製做 ISO 檔案
- 在 WEB 端可以對檔案做多維分析的 BI 軟體Web
- Java Web 檔案上傳JavaWeb
- WEB漏洞——檔案上傳Web
- [web安全] 檔案包含漏洞Web
- gzip的介紹以及web伺服器對檔案壓縮的支援Web伺服器
- 檔案伺服器rsync伺服器
- web專案讀取classpath下面檔案Web
- Vitepress——利用Typora直接編輯位於web伺服器上的.md檔案ViteWeb伺服器
- Web安全-檔案上傳漏洞Web
- Web安全之檔案上傳Web
- WEB安全:檔案上傳漏洞Web
- web.xml檔案的作用WebXML
- web線上檔案管理器Web
- 檔案伺服器 — File Browser伺服器
- samba伺服器配置檔案Samba伺服器
- 檔案伺服器caddy伺服器
- Nginx搭建檔案伺服器Nginx伺服器
- Linux伺服器上傳檔案傳送檔案Linux伺服器
- FileZilla 向伺服器傳檔案或下載檔案伺服器
- 關於Java Web工程中web.xml檔案JavaWebXML
- 檔案伺服器之一:NFS伺服器伺服器NFS
- 利用歸檔來做資料檔案的恢復
- 關於Java使用MinIO檔案伺服器操作檔案Java伺服器
- <web滲透-檔案上傳漏洞>Web
- Web前端——檔案存放位置規範Web前端
- 如何將web打包成jar檔案WebJAR
- 高效能Web伺服器Nginx的配置與部署研究(12)應用模組之Memcached做檔案快取時壓縮引起的問題...Web伺服器Nginx快取
- lighttpd 對視訊檔案壓縮檔案做防盜鏈薦httpd
- 伺服器端uwsgi配置檔案伺服器
- 伺服器上下載檔案FTP伺服器FTP
- SaltStack中的檔案伺服器伺服器
- curl 跨伺服器同步檔案伺服器
- nginx實現檔案伺服器Nginx伺服器
- 如何用自己普通家用個人電腦做web網站伺服器Web網站伺服器
- 檔案伺服器之二:FTP伺服器(pureftp)伺服器FTP