1
我正在使用Node讀取文件並試圖將其作爲多部分MIME文章發送,但遇到文件在接收端出現損壞問題。Node.js緩衝區和二進制文件
我讀文件和發送像這樣準備吧:
fs.readFile("before.png", function(err,data) {
// Snip
content += data.slice(0,data.length);
的問題是,有些事情似乎填充流。請參閱下面的圖像,比較在目標處收到的untilpng源文件和文件。 EF BF BD的序列表明.slice()沒有給我底層字節,可能是強制使用UTF-8編碼的東西。
我還試圖通過獲得的toString字節(),但沒有豆子那裏。我仍然在上傳的文件中看到損壞。
// content += data.toString() // UTF-8 default
content += data.toString('binary')
我懷疑默認的toString()也被強迫的二進制文件,以UTF-8也是如此,但本來預計「二進制」給我底層的字節流?
編輯迴應布拉德。我嘗試concattin'g,但我仍然需要將我的對象轉換回字符串,此時UTF-8字符似乎重新出現在流中。
contentToSend = Buffer.concat([ header, data, footer ]);
this.oauth.post(endpoint, accessToken, accessTokenSecret, contentToSend.toString(), contentType, function(x, y, z) {
非常感謝您的創意建議。在某些時候,我確實需要將它轉換回一個String來發送到我的HTTP帖子中。即使在concatt'ing和toString()整個事情後,我看到了同樣的腐敗。將我現在使用的代碼附加到上面的帖子中,以便我可以格式化它。 –
TBC - 我不知道我是否患有這個人一樣 - http://stackoverflow.com/questions/14855015/getting-binary-content-in-node-js-using-request –
@BenjaminWootton,你的問題然後與你的緩衝區無關,但與源數據編碼。使用任何文件的編碼,你的問題應該消失。如果你想要什麼東西出來,那麼你將不得不把文件視爲二進制文件。不過你可以先嚐試一下這個人的'none'編碼。 – Brad