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