TML超大文件上傳和斷點續(xù)傳的實現(xiàn),VUE 大文件分片上傳(斷點續(xù)傳、并發(fā)上傳、秒傳),完美解決PHP無法上傳大文件方法,NGINX 實現(xiàn)文件夾上傳(保留目錄結(jié)構(gòu)),http之實現(xiàn)文件上傳與下載,內(nèi)網(wǎng) 批量大文件上傳下載,瀏覽器超大文件上傳和斷點續(xù)傳的實現(xiàn),超大文件上傳解決方案:分片斷點上傳,
VUE+ELEMENT 上傳文件及文件夾,VUE上傳大文件的三種解決方案,DJANGO+VUE實現(xiàn)文件夾上傳,前端實現(xiàn)文件夾的上傳和下載,HTML+前端超大視頻上傳解決方案,網(wǎng)頁 項目文件夾上傳下載解決方案,
在網(wǎng)上也花時間搜索過相關的資料,論壇里面也有網(wǎng)友交流過,還加過很多QQ群微信群,但是結(jié)果都不太令人滿意。網(wǎng)上的文章吧基本上都是相互抄襲的,內(nèi)容不能說是一模一樣吧,但是實際上都是差不多的,提到的也是HTML5的API,基本上都是說的用的HTML5的API。你說不能用吧他也能傳,但是兼容性不行,只能在chrome上面用,用吧也只是基本上的功能,你沒辦法擴展。
不能夠滿足公司項目上的需求,公司這邊實際上是需要一個成熟的商業(yè)解決方案,而不是一個文件的上傳思路。但是網(wǎng)上幾乎所有的文章都是在講思路和想法,很少有提供成熟解決方案的。另外一方面就是公司項目需要最好能夠提供國企和央企的成功案例,這個也是客戶那邊的要求。項目這塊要求比較高,不可能隨便在網(wǎng)上找?guī)讉€開源的代碼糊弄過去,因為后期項目要做維護和升級。
前端用了JS,JQuery,vue2,vue3,vue-cli,html5,html,前端框架也比較多,但是網(wǎng)上提供的都是代碼片斷。
找了一圈基本上都是講上傳的,下載的講的很少,文章里面也是寫的不詳細
客戶那邊是一家國企,主要也是給政府和央企做項目。實際上客戶對具體的技術(shù)并不關心。客戶關注點不在這塊,主要是對穩(wěn)定性和兼容性比較在意。
網(wǎng)上搜了一下,基本上大部分的文章里面提到的前端JS或VUE或HTML5上傳文件夾的方案都是使用JS的API來實現(xiàn)的,也就是html5提供的一個API,也就是chrome提供的API。用是能用,但是不夠好用,有很多限制,也不夠靈活。不太能夠滿足用戶的實際應用需求,
多多少少還是有點問題,穩(wěn)定性,靈活性,可擴展性,安全性方面還是有點問題。chrome的每個域名只允許5個TCP連接的限制,這個基本上是一個無法逾越的鴻溝,目前為止網(wǎng)上還沒有發(fā)現(xiàn)哪家公司或者個人能夠突破的。
我們做項目的話個人用戶比較少,一般都是行業(yè)用戶,比如政府,公司,金融,這類企業(yè),他們對用戶體驗要求較高。就實際項目開發(fā)和實施的情況來看,html5或者chrome提供的功能基本上都是不能夠滿足他們需求的,都需要我們進行定制開發(fā)。
文件夾上傳,html5提供了API,用戶開始用的時候還行,然后就提了要求要求支持斷點續(xù)傳,
客戶這邊是一個政府單位,涉密了,就不透露單位名稱了,每天主要就是上傳和下載一些資料,數(shù)據(jù)都是加密的。
客戶那邊每天都會上傳和下載資料,
視頻教程:https://www.ixigua.com/7226245960341389859
1.下載示例
https://gitee.com/xproer/up6-vue-cli
將up6組件復制到項目中
示例中已經(jīng)包含此目錄
1.引入up6組件
2.配置接口地址
接口地址分別對應:文件初始化,文件數(shù)據(jù)上傳,文件進度,文件上傳完畢,文件刪除,文件夾初始化,文件夾刪除,文件列表
參考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de
3.處理事件
啟動測試
啟動成功
效果
數(shù)據(jù)庫
源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra
源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl
OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
授權(quán)碼生成器:https://drive.weixin.qq.com/s?k=ACoAYgezAAwTIcFph1
JAX上傳的用戶體驗更好,HTML上傳用戶使用更方便一點,直接在網(wǎng)頁里面就能夠操作了。示例在下面提供了,是完整的源代碼,有教程,有視頻教程,基本上使用非常簡單,開發(fā)也非常簡單,有技術(shù)支持,
網(wǎng)上搜了一下,基本上講這塊的文章還是很多,但是就是一個字亂,講的很混亂。也沒有提供完整的前后端示例。
用戶上傳的文件比較大,有20G左右,直接用HTML傳的話容易失敗,服務器也容易出錯,需要分片,分塊,分割上傳。也就是將一個大的文件分成若干個小文件塊來上傳,另外就是需要實現(xiàn)秒傳功能和防重復功能,秒傳就是用戶如果上傳過這個文件,那么直接在數(shù)據(jù)庫中查找記錄就行了,不用再上傳一次,節(jié)省時間,實現(xiàn)的思路是對文件做MD5計算,將MD5值保存到數(shù)據(jù)庫,算法可以用MD5,或者CRC,或者SHA1,這個隨便哪個算法都行。
分片還需要支持斷點續(xù)傳,現(xiàn)在HTML5雖然提供了信息記錄功能,但是只支持到了會話級,也就是用戶不能關閉瀏覽器,也不能清空緩存。但是有的政府單位上傳大文件,傳了一半下班了,明天繼續(xù)傳,電腦一關結(jié)果進度信息就丟失了,這個是他們的一個痛點。
切片的話還有一點就是在服務器上合并,一個文件的所有分片數(shù)據(jù)上傳完后需要在服務器端進行合并操作。
1.下載示例
https://gitee.com/xproer/up6-vue-cli
將up6組件復制到項目中
示例中已經(jīng)包含此目錄
1.引入up6組件
2.配置接口地址
接口地址分別對應:文件初始化,文件數(shù)據(jù)上傳,文件進度,文件上傳完畢,文件刪除,文件夾初始化,文件夾刪除,文件列表
參考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de
3.處理事件
啟動測試
啟動成功
效果
數(shù)據(jù)庫
者: 俊欣
來源:關于數(shù)據(jù)分析與可視化
今天小編來為大家安利另外一個用于繪制可視化圖表的Python框架,名叫Dash,建立在Flask、Plotly.js以及React.js的基礎之上,在創(chuàng)建之出的目的是為了幫助前端知識匱乏的數(shù)據(jù)分析人員,以純Python編程的方式快速制作出交互特性強的數(shù)據(jù)可視化大屏,在經(jīng)過多年的迭代發(fā)展,如今不僅僅可以用來開發(fā)在線數(shù)據(jù)可視化作品,即便是輕量級的數(shù)據(jù)儀表盤、BI應用甚至是博客或者是常規(guī)的網(wǎng)站都隨處可見Dash框架的影子,今天小編就先來介紹一下該框架的一些基礎知識,并且來制作一個簡單的數(shù)據(jù)可視化大屏。
我們先來了解一下Dash框架中的兩個基本概念
Layout顧名思義就是用來設計可視化大屏的外觀和布局,添加一些例如下拉框、單選框、復選框、輸入框、文本框、滑動條等組件,其中Dash框架對HTML標簽也進行了進一步的封裝,使得我們直接可以通過Python代碼來生成和設計每一個網(wǎng)頁所需要的元素,例如
<div>
<h1>Hello World!!</h1>
<div>
<p>Dash converts Python classes into HTML</p>
</div>
</div>
我們轉(zhuǎn)化成Dash的Python結(jié)構(gòu)就是
html.Div([
html.H1('Hello Dash'),
html.Div([
html.P('Dash converts Python classes into HTML'),
])
])
Callbacks也就是回調(diào)函數(shù),基本上是以裝飾器的形式來體現(xiàn)的,實現(xiàn)前后端異步通信的交互,例如我們在點擊按鈕或者下拉框之后出現(xiàn)的功能就是通過回調(diào)函數(shù)來實現(xiàn)的。
在導入模塊之前,我們先用pip命令來進行安裝,
! pip install dash
! pip install dash-html-components
! pip install dash-core-components
! pip install plotly
然后我們導入這些剛剛安裝完的模塊,其中dash-html-components用來生成HTML標簽,dash-core-components模塊用來生成例如下拉框、輸入框等組件,這里我們還需要用到plotly模塊,因為我們需要用到的數(shù)據(jù)來自該模塊,里面是一眾互聯(lián)網(wǎng)公司過去一段時間中股價的走勢
import dash
import dash_html_components as html
import dash_core_components as dcc
import plotly.graph_objects as go
import plotly.express as px
那么我們讀取數(shù)據(jù)并且用plotly來繪制折線圖,代碼如下
app = dash.Dash() #實例化Dash
df = px.data.stocks() #讀取股票數(shù)據(jù)
def stock_prices():
# 繪制折線圖
fig = go.Figure([go.Scatter(x=df['date'], y=df['AAPL'],
line=dict(color='firebrick', width=4), name='Apple')
])
fig.update_layout(title='股價隨著時間的變幻',
xaxis_title='日期',
yaxis_title='價格'
)
return fig
app.layout = html.Div(id='parent', children=[
html.H1(id='H1', children='Dash 案例一', style={'textAlign': 'center',
'marginTop': 40, 'marginBottom': 40}),
dcc.Graph(id='line_plot', figure=stock_prices())
])
if __name__ == '__main__':
app.run_server()
我們點擊運行之后會按照提示將url復制到瀏覽器當中便可以看到出來的結(jié)果了,如下所示
從代碼的邏輯上來看,我們通過Dash框架中的Div方法來進行頁面的布局,其中有參數(shù)id來指定網(wǎng)頁中的元素,以及style參數(shù)來進行樣式的設計,最后我們將會指出來的圖表放在dcc.Graph()函數(shù)當中。
然后我們再添置一個下拉框,當我們點擊這個下拉框的時候,可是根據(jù)我們的選擇展示不同公司的股價,代碼如下
dcc.Dropdown(id='dropdown',
options=[
{'label': '谷歌', 'value': 'GOOG'},
{'label': '蘋果', 'value': 'AAPL'},
{'label': '亞馬遜', 'value': 'AMZN'},
],
value='GOOG'),
output
options參數(shù)中的label對應的是下拉框中的各個標簽,而value對應的是DataFrame當中的列名
df.head()
output
最后我們將下拉框和繪制折線圖的函數(shù)給連接起來,我們點擊下拉框選中不同的選項的時候,折線圖也會相應的產(chǎn)生變化,
@app.callback(Output(component_id='bar_plot', component_property='figure'),
[Input(component_id='dropdown', component_property='value')])
def graph_update(dropdown_value):
print(dropdown_value)
# Function for creating line chart showing Google stock prices over time
fig = go.Figure([go.Scatter(x=df['date'], y=df['{}'.format(dropdown_value)],
line=dict(color='firebrick', width=4))
])
fig.update_layout(title='股價隨著時間的變幻',
xaxis_title='日期',
yaxis_title='價格'
)
return fig
我們看到callback()方法中指定輸入和輸出的媒介,其中Input參數(shù),里面的component_id對應的是下拉框的id也就是dropdown,而Output參數(shù),當中的component_id對應的是折線圖的id也就是bar_plot,我們來看一下最后出來的結(jié)果如下
最后,全部的代碼如下所示
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。