婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 90行Python代碼開發(fā)個人云盤應(yīng)用

90行Python代碼開發(fā)個人云盤應(yīng)用

熱門標(biāo)簽:上海機器人外呼系統(tǒng)哪家好 地圖制圖標(biāo)注位置改變是移位嗎 地圖標(biāo)注微信發(fā)送位置不顯示 蓋州市地圖標(biāo)注 南京銷售外呼系統(tǒng)軟件 浙江電銷卡外呼系統(tǒng)好用嗎 地圖標(biāo)注的意義點 房產(chǎn)電銷外呼系統(tǒng) 315電話機器人廣告

本文示例代碼已上傳至我的Github倉庫https://github.com/CNFeffery/DataScienceStudyNotes

1 簡介

在今天的教程中,我們將介紹如何在Dash中高效地開發(fā)web應(yīng)用中非常重要的「文件上傳」及「下載」功能。

2 在Dash中實現(xiàn)文件上傳與下載

2.1 在Dash中配合dash-uploader實現(xiàn)文件上傳

其實在自帶的dash_core_components中就封裝了基于html5原生API的dcc.Upload()組件,可以實現(xiàn)簡單的文件上傳功能,但說實話,非常的「不好用」,其主要缺點有:

  • 「文件大小有限制,150M到200M左右即出現(xiàn)瓶頸」
  • 「策略是先將用戶上傳的文件存放在瀏覽器內(nèi)存,再通過base64形式傳遞到服務(wù)端再次解碼,非常低效」
  • 「整個上傳過程無法配合準(zhǔn)確的進度條」

正是因為Dash自帶的上傳部件如此不堪,所以一些優(yōu)秀的第三方拓展涌現(xiàn)出來,其中最好用的要數(shù)dash-uploader,它解決了上面提到的dcc.Upload()的所有短板。通過pip install dash-uploader進行安裝之后,就可以直接在Dash應(yīng)用中使用了。

我們先從極簡的一個例子出發(fā),看一看在Dash中使用dash-uploader的正確姿勢:

app1.py

import dash
import dash_uploader as du
import dash_bootstrap_components as dbc
import dash_html_components as html

app = dash.Dash(__name__)

# 配置上傳文件夾
du.configure_upload(app, folder='temp')

app.layout = html.Div(
    dbc.Container(
        du.Upload()
    )
)

if __name__ == '__main__':
    app.run_server(debug=True)

可以看到,僅僅十幾行代碼,我們就配合dash-uploader實現(xiàn)了簡單的文件上傳功能,其中涉及到dash-uploader兩個必不可少的部分:

2.1.1 利用du.configure_upload()進行配置

要在Dash中正常使用dash-uploader,我們首先需要利用du.configure_upload()進行相關(guān)配置,其主要參數(shù)有:

「app」,即對應(yīng)已經(jīng)實例化的Dash對象;

「folder」,用于設(shè)置上傳的文件所保存的根目錄,可以是相對路徑,也可以是絕對路徑;

「use_upload_id」,bool型,默認(rèn)為True,這時被用戶上傳的文件不會直接置于「folder」參數(shù)指定目錄,而是會存放于du.Upload()部件的upload_id對應(yīng)的子文件夾之下;設(shè)置為False時則會直接存放在根目錄,當(dāng)然沒有特殊需求還是不要設(shè)置為False。

通過du.configure_upload()我們就完成了基本的配置。

2.1.2 利用du.Upload()創(chuàng)建上傳部件

接下來我們就可以使用到du.Upload()來創(chuàng)建在瀏覽器中渲染供用戶使用的上傳部件了,它跟常規(guī)的Dash部件一樣具有「id」參數(shù),也有一些其他的豐富的參數(shù)供開發(fā)者充分自由地自定義功能和樣式:

「text」,字符型,用于設(shè)置上傳部件內(nèi)顯示的文字;

「text_completed」,字符型,用于設(shè)置上傳完成后顯示的文字內(nèi)容前綴;

「cancel_button」,bool型,用于設(shè)置是否在上傳過程中顯示“取消”按鈕;

「pause_button」,bool型,用于設(shè)置是否在上傳過程中顯示“暫停”按鈕;

「filetypes」,用于限制用戶上傳文件的格式范圍,譬如['zip', 'rar', '7zp']就限制用戶只能上傳這三種格式的文件。默認(rèn)為None即無限制;

「max_file_size」,int型,單位MB,用于限制單次上傳的大小上限,默認(rèn)為1024即1GB;

「default_style」,類似常規(guī)Dash部件的style參數(shù),用于傳入css鍵值對,對部件的樣式進行自定義;

「upload_id」,用于設(shè)置部件的唯一id信息作為du.configure_upload()中所設(shè)置的緩存根目錄的下級子目錄,用于存放上傳的文件,默認(rèn)為None,會在Dash應(yīng)用啟動時自動生成一個隨機值;

「max_files」,int型,用于設(shè)置一次上傳最多可包含的文件數(shù)量,默認(rèn)為1,也推薦設(shè)置為1,因為目前對于多文件上傳仍有「進度條異常」、「上傳結(jié)束顯示異常」等bug,所以不推薦設(shè)置大于1。

知曉了這些參數(shù)的作用之后,我們就可以創(chuàng)建出更符合自己需求的上傳部件:

app2.py

import dash
import dash_uploader as du
import dash_bootstrap_components as dbc
import dash_html_components as html

app = dash.Dash(__name__)

# 配置上傳文件夾
du.configure_upload(app, folder='temp')

app.layout = html.Div(
    dbc.Container(
        du.Upload(
            id='uploader',
            text='點擊或拖動文件到此進行上傳!',
            text_completed='已完成上傳文件:',
            cancel_button=True,
            pause_button=True,
            filetypes=['md', 'mp4'],
            default_style={
                'background-color': '#fafafa',
                'font-weight': 'bold'
            },
            upload_id='我的上傳'
        )
    )
)

if __name__ == '__main__':
    app.run_server(debug=True)

但像前面的例子那樣直接在定義app.layout時就傳入實際的du.Upload()部件,會產(chǎn)生一個問題——應(yīng)用啟動后,任何訪問應(yīng)用的用戶都對應(yīng)一樣的upload_id,這顯然不是我們期望的,因為不同用戶的上傳文件會混在一起。

因此可以參考下面例子的方式,在每位用戶訪問時再渲染隨機id的上傳部件,從而確保唯一性:

app3.py

import dash
import dash_uploader as du
import dash_bootstrap_components as dbc
import dash_html_components as html

import uuid

app = dash.Dash(__name__)

# 配置上傳文件夾
du.configure_upload(app, folder='temp')

def render_random_id_uploader():

    return du.Upload(
            id='uploader',
            text='點擊或拖動文件到此進行上傳!',
            text_completed='已完成上傳文件:',
            cancel_button=True,
            pause_button=True,
            filetypes=['md', 'mp4'],
            default_style={
                'background-color': '#fafafa',
                'font-weight': 'bold'
            },
            upload_id=uuid.uuid1()
        )

def render_layout():

    return html.Div(
    dbc.Container(
        render_random_id_uploader()
    )
)

app.layout = render_layout

if __name__ == '__main__':
    app.run_server(debug=True)

可以看到,每次訪問時由于upload_id不同,因此不同的會話擁有了不同的子目錄。

2.1.3 配合du.Upload()進行回調(diào)

在du.Upload()中額外還有isCompleted與fileNames兩個屬性,前者用于判斷當(dāng)前文件是否上傳完成,后者則對應(yīng)此次上傳的文件名稱,參考下面這個簡單的例子:

app4.py

import dash
import dash_uploader as du
import dash_bootstrap_components as dbc
import dash_html_components as html
from dash.dependencies import Input, Output, State

app = dash.Dash(__name__)

# 配置上傳文件夾
du.configure_upload(app, folder='temp')

app.layout = html.Div(
    dbc.Container(
        [
            du.Upload(id='uploader'),
            html.H5('上傳中或還未上傳文件!', id='upload_status')
        ]
    )
)


@app.callback(
    Output('upload_status', 'children'),
    Input('uploader', 'isCompleted'),
    State('uploader', 'fileNames')
)
def show_upload_status(isCompleted, fileNames):
    if isCompleted:
        return '已完成上傳:'+fileNames[0]

    return dash.no_update


if __name__ == '__main__':
    app.run_server(debug=True, port=8051)

2.2 配合flask進行文件下載

相較于文件上傳,在Dash中進行文件的下載就簡單得多,因為我們可以配合flask的send_from_directory以及html.A()部件來為指定的服務(wù)器端文件創(chuàng)建下載鏈接,譬如下面的簡單示例就打通了文件的上傳與下載:

app5.py

from flask import send_from_directory
import dash
import dash_uploader as du
import dash_html_components as html
import dash_bootstrap_components as dbc
from dash.dependencies import Input, Output
import os

app = dash.Dash(__name__)

du.configure_upload(app, 'temp', use_upload_id=False)

app.layout = html.Div(
    dbc.Container(
        [
            du.Upload(id='upload'),
            html.Div(
                id='download-files'
            )
        ]
    )
)

@app.server.route('/download/file>')
def download(file):

    return send_from_directory('temp', file)

@app.callback(
    Output('download-files', 'children'),
    Input('upload', 'isCompleted')
)
def render_download_url(isCompleted):

    if isCompleted:
        return html.Ul(
            [
                html.Li(html.A(f'/{file}', href=f'/download/{file}', target='_blank'))
                for file in os.listdir('temp')
            ]
        )

    return dash.no_update

if __name__ == '__main__':
    app.run_server(debug=True)

3 用Dash編寫簡易個人網(wǎng)盤應(yīng)用

在學(xué)習(xí)了今天的案例之后,我們就掌握了如何在Dash中開發(fā)文件上傳及下載功能,下面我們按照慣例,結(jié)合今天的主要內(nèi)容,來編寫一個實際的案例;

今天我們要編寫的是一個簡單的個人網(wǎng)盤應(yīng)用,我們可以通過瀏覽器訪問它,進行文件的上傳、下載以及刪除:

import dash
import dash_bootstrap_components as dbc
import dash_html_components as html
from dash.dependencies import Input, Output, State
import dash_uploader as du
import os
from flask import send_from_directory
import time

app = dash.Dash(__name__, suppress_callback_exceptions=True)

du.configure_upload(app, 'NetDisk', use_upload_id=False)

app.layout = html.Div(
    dbc.Container(
        [
            html.H3('簡易的個人云盤應(yīng)用'),
            html.Hr(),
            html.P('文件上傳區(qū):'),
            du.Upload(id='upload',
                      text='點擊或拖動文件到此進行上傳!',
                      text_completed='已完成上傳文件:',
                      max_files=1000),
            html.Hr(),
            dbc.Row(
                [
                    dbc.Button('刪除選中的文件', id='delete-btn', outline=True),
                    dbc.Button('打包下載選中的文件', id='download-btn', outline=True)
                ]
            ),
            html.Hr(),
            dbc.Spinner(
                dbc.Checklist(
                    id='file-list-check'
                )
            ),
            html.A(id='download-url', target='_blank')
        ]
    )
)


@app.server.route('/download/file>')
def download(file):
    return send_from_directory('NetDisk', file)


@app.callback(
    [Output('file-list-check', 'options'),
     Output('download-url', 'children'),
     Output('download-url', 'href')],
    [Input('upload', 'isCompleted'),
     Input('delete-btn', 'n_clicks'),
     Input('download-btn', 'n_clicks')],
    State('file-list-check', 'value')
)
def render_file_list(isCompleted, delete_n_clicks, download_n_clicks, check_value):
    # 獲取上下文信息
    ctx = dash.callback_context

    if ctx.triggered[0]['prop_id'] == 'delete-btn.n_clicks':

        for file in check_value:
            try:
                os.remove(os.path.join('NetDisk', file))
            except FileNotFoundError:
                pass

    if ctx.triggered[0]['prop_id'] == 'download-btn.n_clicks':

        import zipfile

        with zipfile.ZipFile('NetDisk/打包下載.zip', 'w') as zipobj:
            for file in check_value:
                try:
                    zipobj.write(os.path.join('NetDisk', file))
                except FileNotFoundError:
                    pass

        return [
                   {'label': file, 'value': file}
                   for file in os.listdir('NetDisk')
                   if file != '打包下載.zip'
               ], '打包下載鏈接', '/download/打包下載.zip'

    time.sleep(2)

    return [
               {'label': file, 'value': file}
               for file in os.listdir('NetDisk')
               if file != '打包下載.zip'
           ], '', ''


if __name__ == '__main__':
    app.run_server(debug=True)

以上就是90行Python代碼開發(fā)個人云盤應(yīng)用的詳細內(nèi)容,更多關(guān)于python 開發(fā)個人云盤的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • python 實現(xiàn)百度網(wǎng)盤非會員上傳超過500個文件的方法
  • Python 一鍵獲取百度網(wǎng)盤提取碼的方法
  • Python使用百度API上傳文件到百度網(wǎng)盤代碼分享
  • Python實現(xiàn)115網(wǎng)盤自動下載的方法
  • Python解析網(wǎng)頁源代碼中的115網(wǎng)盤鏈接實例

標(biāo)簽:赤峰 克拉瑪依 雙鴨山 陽泉 貴州 臨汾 金華 日照

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《90行Python代碼開發(fā)個人云盤應(yīng)用》,本文關(guān)鍵詞  90行,Python,代碼,開發(fā),個,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《90行Python代碼開發(fā)個人云盤應(yīng)用》相關(guān)的同類信息!
  • 本頁收集關(guān)于90行Python代碼開發(fā)個人云盤應(yīng)用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩国产电影| 成人在线视频一区二区| 一区二区三区蜜桃网| 国产精品国产三级国产普通话蜜臀 | 亚洲三级在线播放| 国产精品福利电影一区二区三区四区 | 精品乱人伦小说| 日韩欧美一级二级三级久久久| 欧美一级日韩不卡播放免费| 日韩欧美视频在线| 久久精品亚洲国产奇米99| 精品国产99国产精品| 欧美成人一区二区三区片免费| 日韩欧美亚洲国产另类 | 久久99精品久久久久久久久久久久| 婷婷久久综合九色综合绿巨人| 午夜视频一区二区三区| 蜜桃视频在线一区| 麻豆视频一区二区| 国产激情一区二区三区| av电影在线观看不卡| 欧美亚洲动漫制服丝袜| 69堂国产成人免费视频| 久久久久高清精品| 亚洲欧美在线aaa| 日本午夜一区二区| 成人免费看视频| 91精彩视频在线| 日韩三级免费观看| 国产欧美日韩另类视频免费观看| 中文字幕精品一区二区精品绿巨人 | 91浏览器入口在线观看| 日本道精品一区二区三区 | 国产麻豆精品在线| 色偷偷成人一区二区三区91| 777欧美精品| 国产精品久久久久永久免费观看| 亚洲成a人v欧美综合天堂| 秋霞影院一区二区| 成人免费av网站| 欧美三级韩国三级日本一级| 国产日韩av一区| 丝袜诱惑亚洲看片| 成人性视频免费网站| 欧美日韩色综合| 亚洲国产精品成人综合 | 亚洲国产成人在线| 日本欧美肥老太交大片| 色88888久久久久久影院野外| 久久久精品黄色| 天天综合网天天综合色| 91麻豆免费看片| 国产人妖乱国产精品人妖| 午夜精品久久久久久久99樱桃| 国内成+人亚洲+欧美+综合在线| 在线亚洲欧美专区二区| 久久综合色天天久久综合图片| 国产精品网站一区| 另类成人小视频在线| 91国偷自产一区二区开放时间| 精品999在线播放| 亚洲成人资源在线| 欧美少妇bbb| 亚洲国产高清在线| 国产成人免费视频网站| 欧美精品一区男女天堂| 日产欧产美韩系列久久99| 欧美精品一卡二卡| 亚洲第一av色| 欧美撒尿777hd撒尿| 一级女性全黄久久生活片免费| 99久久精品久久久久久清纯| 中文字幕一区二区三区在线观看 | 欧美国产日韩一二三区| 国产成人在线看| 久久噜噜亚洲综合| 久久99精品视频| 久久综合色天天久久综合图片| 国产综合久久久久久鬼色| 精品国产第一区二区三区观看体验 | 欧美日本精品一区二区三区| 亚洲乱码日产精品bd| 91成人在线观看喷潮| 一区二区日韩电影| 欧美性生活久久| 五月天婷婷综合| 日韩精品资源二区在线| 国产成人日日夜夜| 国产精品入口麻豆原神| 成人免费视频caoporn| 亚洲免费成人av| 欧美精品tushy高清| 色哟哟日韩精品| 亚洲第一精品在线| 欧美精品一区男女天堂| 高清不卡在线观看| 成人免费一区二区三区视频| 91免费看视频| 日韩av一区二| 久久免费精品国产久精品久久久久 | 日韩一级高清毛片| 琪琪久久久久日韩精品| 欧美变态tickling挠脚心| 国产精品1区2区| 亚洲精品成人少妇| 欧美精品一区二区三区一线天视频 | 精品一区二区三区欧美| 国产欧美日韩综合| 欧美视频三区在线播放| 国产一区二区影院| 一区二区三区电影在线播| 精品成人私密视频| 欧美丝袜丝交足nylons图片| 激情综合网最新| 一区二区视频在线| 精品日韩在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲国产色一区| 久久精品一区四区| 91精品国产手机| jlzzjlzz亚洲日本少妇| 肉色丝袜一区二区| 国产精品灌醉下药二区| 日韩欧美亚洲国产精品字幕久久久 | 精品在线一区二区| 午夜久久电影网| 1区2区3区精品视频| 久久久亚洲高清| 欧美大白屁股肥臀xxxxxx| 欧美吻胸吃奶大尺度电影| 风间由美一区二区三区在线观看| 久久精品72免费观看| 日韩专区欧美专区| 亚洲一区成人在线| 亚洲男人天堂av网| 国产欧美一区二区三区网站| 7878成人国产在线观看| 9191精品国产综合久久久久久| 在线观看日韩电影| 成人一区二区三区在线观看| 麻豆精品视频在线观看免费| 麻豆精品国产传媒mv男同| 日韩国产精品91| 婷婷综合在线观看| 日日夜夜免费精品| 日韩在线a电影| 亚洲成a人片在线不卡一二三区| 亚洲欧美日韩久久| 亚洲男同性恋视频| 香港成人在线视频| 亚洲超碰精品一区二区| 亚洲成年人影院| 日本一道高清亚洲日美韩| 麻豆国产精品官网| 国产激情视频一区二区三区欧美| 国产精品影视网| 国产精品18久久久久久久久久久久| 国产在线不卡视频| 成人涩涩免费视频| 91色九色蝌蚪| 精品视频123区在线观看| 欧美久久久久中文字幕| 国产精品你懂的在线欣赏| 国产精品污网站| 亚洲欧美激情一区二区| 亚洲成av人片一区二区| 老司机精品视频在线| 国模套图日韩精品一区二区| 国产91精品精华液一区二区三区| 国产一区二区主播在线| av一区二区三区在线| 精品视频在线免费看| www久久精品| 中文字幕在线不卡视频| 玉足女爽爽91| 日韩电影在线观看一区| 岛国精品在线播放| 欧洲一区二区三区免费视频| 欧美mv和日韩mv国产网站| 亚洲女女做受ⅹxx高潮| 无码av免费一区二区三区试看| 久久精品国产精品亚洲红杏| 国产福利视频一区二区三区| 91日韩在线专区| 欧美一区二区三区视频在线| 国产拍欧美日韩视频二区| 亚洲va韩国va欧美va| 国产一区二区三区免费观看| 91亚洲资源网| 日韩视频免费观看高清完整版 | 欧美福利视频一区| 综合网在线视频| 黄色精品一二区| 欧美日韩国产一级片| 中文字幕+乱码+中文字幕一区| 天天影视网天天综合色在线播放| 成人激情电影免费在线观看| 日韩免费福利电影在线观看| 亚洲制服欧美中文字幕中文字幕| 国产成人av电影|