Я пытаюсь прочитать файл в приложении NAPI и вызвать функцию обратного вызова, чтобы записать его в поток записи в приложении nodejs.
exmaple_Class.cpp
void readFromTransientFile(const Napi::CallbackInfo &info)
{
Napi::Env env = info.Env();
Napi::HandleScope scope(env);
Napi::Function cb = info[0].As<Napi::Function>();
while ((this->actualClass_->pos() < this->actualClass_->size()) &&
((readLength = this->actualClass_->read((void *)tempBuffer, sizeof(tempBuffer))) > 0))
{
//cb.Call(env.Global(), {Napi::Buffer<char>::New(env, tempBuffer, sizeof(tempBuffer))});
cb.Call(env.Global(), {Napi::String::New(env, tempBuffer)});
writeTotal += readLength;
}
std::cout << "Done!" << std::endl;
}
exmaple_Class.js
const testAddon = require("./build/Release/testaddon.node");
const fs = require("fs");
const prevInstance = new testAddon.OtClass();
const writeStream = fs.createWriteStream("./downloads/lake.jpg");
prevInstance.readFromTransientFile(
function (msg) {
console.log(">> received buffer from getFile: ", msg);
console.log(">> typeof msg", typeof msg);
writeStream.write(msg);
}
);
writeStream.end();
Ограничение боковой функции C++ заключается в том, что она не может возвращать значение, поэтому данные должны возвращаться в обратном вызове. Самое смешное, что если это текстовый файл, он работает правильно, но для других типов файлов, таких как zip или jpeg, я получаю искаженные данные. Если я передаю дескриптор файла функции C++ и использую функцию записи UNIX, я получаю файл. Но я хотел бы отправить эти данные по HTTP, используя Express. Так что же происходит? Как я могу правильно обернуть и вернуть двоичные данные в объектах NAPI.