Node中的文件操作(後端)與瀏覽器中的文件操作(前端)

瀏覽器端文件對象

File

重要及其常用屬性:

File.name;

File.size;

File.type;(對於保存文件到本地時命名文件的格式)

 

瀏覽器中對文件對象的操作

重要及其常用操作方法:

文件切片:Blob.prototype.slice()

文件預覽(獲取指向文件的url鏈接):

URL.createObjectURL()

fileReader.readAsDataURL(file);

    fileReader.onload = function (event) {
      resolve(event.target.result);
    };

 FileReader常用方法及其使用場景:

獲取文件的ArrayBuffer; 獲取文件的原始二進制數據; 獲取文件的Base64格式的URL編碼地址; 獲取文件的文本內容;

 

Node端文件對象

重要並且常用屬性:

由於我們處理文件上傳時, 是用multer模塊進行完成的, 所以重點關注multer中的文件對象的各種屬性:

File.fieldname   --->  上傳的表單中與文件對象對應的屬性名

File.originalname   --->  在客戶端選擇文件時的名字

File.mimetype

File.size

File.destination

File.filename  ---> 文件存儲在服務器上的名字

File.path

File.buffer(僅當存儲在內存上時有此屬性)

 

 

Node中對文件對象的操作

 重要及其常用方法:

將多個文件合併成一個文件: 

保存前端的文件數據到本地:

讀取本地的文件的文本內容:

讀取本地的文件的二進制數據:

 

前后端发送与接受文件(對於文件的交接)

1 後端把文件資源放到公共資源裡面, 然後暴露給前端url鏈接, 直接可以訪問和下載.

2 後端讀取文件, 提取出文件的二進制數據, 將二進制數據封裝到json對象中, 通過ajax請求返回到前端, 前端提取出文件的二進制數據, 可以將此二進制數據封裝到File或Blob對象中, 通過前端的各種API對其進行各種操作. 這個應該可以作為文件的中轉操作. 然後...(不知道能不能復原成原文件, 主要是如何確定文件的類型, 以及如何通過二進制數據生成文件並下載到本地)

 

1 前端通過input標籤元素或者通過拖拽事件獲取獲取文件對象, 封裝到FormData對象當中, 通過文件上傳的方式發送到後端, 後端通過解析請求體獲取並保存文件對象

2 前端獲取到文件對象之後, 通過提取其中的二進制數據, 封裝到json對象當中, 發送到後端, 後端提取出二進制數據, 然後...(不知道能不能復原成原文件, 主要是如何確定文件的類型, 以及如何通過二進制數據生成文件並下載到本地)

 

關於上述前端與後端第一種文件交接的方式, 已基本了解.

第二種方式沒有太了解過, 這牽扯到前後端對二進制數據操作的不同,  文件二進制數據是固定的, 可是前後端對二進制數據的解析方式需要分別進行仔細的了解. 本質上就是二進制數據與文件實體(或者文件對象)的轉換方式, 需要明白.

 

前端:

ArrayBuffer ==> (Blob ==> File) 通過Blob(ArrayBuffer)構造函數, 也可以通過File(ArrayBuffer)構造函數, File繼承自Blob, 可以把這兩個對象理解成一個東西.

猜測: ArrayBuffer中包含了關於文件的所有信息, 包括文件的格式, 等一切數據. 通過構造函數生成File對象之後, 會自動獲得其name, size, type等屬性;

 

前端如何獲取文件的ArrayBuffer

後端:

來自前端的ArrayBuffer --> 後端的Buffer(構造函數) --> fs.write(Buffer)保存到本地;

 

後端如何獲取文件的ArrayBuffer;

 

posted @ 2023-07-11 11:13  0龙行者0  阅读(9)  评论(0编辑  收藏  举报