淨明有一些軟件開發的經驗,但因爲斷斷續續,而且不用心學習鑽研,所以始終處於初級程序員的水平,未能進階成中高級程序員。以前學習使用過的一些編程語言有C,C++,Javascript,C#,Python,Vue。語言太多讓淨明感到有些焦虑,淨明希望能用一種编程語言做所有的开发工作,於是進行了極簡,現在只使用C語言做底層和服務端的開發,用Javascript和Vue做界面開發,其它語言一概盡量不用。
C語言資料45Please respect copyright.PENANAsDbSu6JP1y
入門教材:《The C Programming Language》45Please respect copyright.PENANAyapz8Krw0P
最新標準文檔(ISO/IEC 9899:202y (en) — n3301 working draft):45Please respect copyright.PENANAJjo3Gwu4zS
https://www.open-std.org/jtc1/sc22/wg14/www/docs/n3301.pdf45Please respect copyright.PENANAePynvafMOf
https://www.open-std.org/jtc1/sc22/wg14/www/docs/
Javascript語言學習資料45Please respect copyright.PENANAcrx724UIUV
教程: https://javascript.info/
Vue學習資料45Please respect copyright.PENANAWzVLcwJWwW
Vue官網:https://vuejs.org/guide/introduction.html
45Please respect copyright.PENANALconDAwaKA
这几天淨明想要实现一個功能:通過網站多线程分片上傳多個文件到服務器,並便於下載,以此为基础做个文件传输和共享的功能开放给大众。这个功能沒什麼新奇的,百度網盤等幾乎每家大公司都會提供這項服務,淨明爲啥要重複造輪子呢?一是因爲這個功能很重要,不方便依賴第三方的服務;二是想鍛鍊提高一下自己的開發能力。開發思路如下:
首先是用戶通過<input type="file" multiple>輸入多個文件。45Please respect copyright.PENANAL656ZwcyZ5
然後通過input.files獲取文件列表,它的類型是[File],File是對Blob類型的擴展,在Blob的基礎上添加了fileName, lastModified等信息。45Please respect copyright.PENANABmIHNAISJW
Blob類型則是對BufferSource的包裝,一個Blob由多個BufferSource和一個content_type信息組成。45Please respect copyright.PENANAujrSwbn3zM
BufferSource則是內存中的一塊連續的數據區域,核心類型是ArrayBuffer及其DataViews.
上傳文件時,首先發送文件名和文件大小到服務端,服務端據此分配存儲空間,返回一個upload_id,用於標記一個文件的上傳任務。45Please respect copyright.PENANAHQLkT4FBuI
客戶端獲取upload_id以後,將在接下來的post中用url攜帶此upload_id,post的body則爲文件binary內容的一小塊,post的Url不僅攜帶upload_id,還攜帶此次post塊在文件中的offset和塊的大小,服務端收到post請求以後,根據url中的upload_id, offset, block_size,將post的body binary內容填入之前創建好的文件中。45Please respect copyright.PENANAdJth9qqixZ
客戶端使用多線程併發上傳各個block binary,直至將文件的所有內容發送完畢。
如果您對網站開發技術感興趣,邀請您加入淨明創建的「C語言+Vue網站開發技術學習交流微信羣」,請加淨明的微信(si_jinmin)以便拉您進羣。
ns 15.158.61.6da2