第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 js 中讀取文件會損壞文件

在 js 中讀取文件會損壞文件

PHP
繁星淼淼 2023-09-08 17:04:54
在 js 中我正在運行這段代碼let str = new TextDecoder("utf8").decode(new Uint8Array(reader.result));let data = {    name:file.name,    size: args.loaded,    contentsize:str.length,    type:file.type,    content:str};let res = await $.post({    url:"/api/files",    data:JSON.stringify(data),    processData: false,    contentType: "application/json",})reader.result 的輸出reader.readAsArrayBuffer(file);然后在 php 中獲取$new["actual"] =strlen($new["content"]);$new["content"] = new MongoDB\BSON\Binary($new["content"] ,MongoDB\BSON\Binary::TYPE_GENERIC);$result = IO::$db->files->insertOne($new);然后會產(chǎn)生一個數(shù)據(jù)庫文檔{     "name" : "test.pdf",     "size" : NumberInt(128454),     "contentsize" : NumberInt(122693),     "type" : "application/pdf",     "actual" : NumberInt(215693)}但是,當我將文件內(nèi)容刪除回文件系統(tǒng)時,文件已損壞并且無法打開。我已經(jīng)運行了 VSCode 附帶的文件比較器,并說數(shù)據(jù)庫內(nèi)容和原始內(nèi)容之間有 0 差異,所以我只能認為問題在于文件大小和讀取內(nèi)容的 3kb 差異,但是什么或者為什么我無法逃脫注意似乎只是二進制文件
查看完整描述

2 回答

?
天涯盡頭無女友

TA貢獻1831條經(jīng)驗 獲得超9個贊

您的示例是 PDF 文件。PDF 文件不是文本文件,不應(yīng)作為文本文件處理。如果更改行結(jié)尾,這將更改文件中不同對象的偏移量,從而損壞 PDF 文件。更糟糕的是,如果 PDF 文件中存在二進制流(例如字體、圖像等),則會破壞流的內(nèi)容,并可能導(dǎo)致無法對其進行解碼。

要解決此問題,請確保將 PDF 文件作為二進制文件進行讀取和寫入。


查看完整回答
反對 回復(fù) 2023-09-08
?
拉丁的傳說

TA貢獻1789條經(jīng)驗 獲得超8個贊

好的,UTF-8 規(guī)范并不包含字節(jié)數(shù)據(jù)范圍內(nèi)所有位代碼的字符,其他語言(例如 PHP)通過添加完成字節(jié)代碼映射的特殊非 UTF-8 字符來解決此問題,但事實并非如此在 JavaScript 中

所以這是 JavaScript 的限制,它不會告訴你它已經(jīng)命中了一個字節(jié)碼,它無法反序列化,這會突出顯示發(fā)生了問題,它只是跳過該字節(jié)并移動到下一個字節(jié),從而破壞了你的數(shù)據(jù)并隱藏腐敗發(fā)生的原因。

這意味著您不能在 JavaScript 中使用 UTF-8 編碼器對包含不支持的字節(jié)碼之一的任何內(nèi)容進行編碼,要解決此問題,可以選擇將字節(jié)轉(zhuǎn)換為十六進制字符串,然后使用它來解碼在服務(wù)器端進行序列化,這會導(dǎo)致一定程度的數(shù)據(jù)膨脹,因為您使用 2 個字節(jié)發(fā)送一個字節(jié)(盡管這比嘗試對字節(jié)數(shù)組進行編碼要少得多),但由于 2 個字母的十六進制字符串映射所有字節(jié)范圍值意味著二進制數(shù)據(jù)不會損壞,并且可以安全地用于基于文本的數(shù)據(jù)序列化(例如通過 JavaScript 的 JSON)


查看完整回答
反對 回復(fù) 2023-09-08
  • 2 回答
  • 0 關(guān)注
  • 181 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號