Я использую код, предложенный в качестве примера в документации для Domino AppDev Pack 1.0.4 , единственное отличие - чтение текстового файла (body.txt) в качестве буфера, этот файл содержит только простой длинный текст (40Ko).
При выполнении документ создается в базе данных, а остальная часть кода не возвращает ошибку. Но, наконец, поле расширенного текста не было добавлено в документ. Здесь возвращается ответ:
response: {"fields":[{"fieldName":"Body","unid":"8EA69129BEECA6DEC1258554002F5DCD","error":{"name":"ProtonError","code":65577,"id":"RICH_TEXT_STREAM_CORRUPT"}}]}
Моя цель - написать очень длинный текст (более 64 КО) в поле расширенного текста. В примере я использую текстовый файл для буфера, но позже это может быть что-то вроде const buffer = Buffer.from ('very long text ...')
Это правильный путь или это должно быть сделано по-другому?
Я использование системы Windows с сервером IBM Domino (r) (64-разрядная версия), выпуск 10.0.1FP4 и AppDevPack 1.0.4.
Заранее благодарим за помощь
Вот код:
const write = async (database) => {
let writable;
let result;
try {
// Create a document with subject write-example-1 to hold rich text
const unid = await database.createDocument({
document: {
Form: 'RichDiscussion',
Title: 'write-example-1',
},
});
writable = await database.bulkCreateRichTextStream({});
result = await new Promise((resolve, reject) => {
// Set up event handlers.
// Reject the Promise if there is a connection-level error.
writable.on('error', (e) => {
reject(e);
});
// Return the response from writing when resolving the Promise.
writable.on('response', (response) => {
console.log("response: " + JSON.stringify(response));
resolve(response);
});
// Indicates which document and item name to use.
writable.field({ unid, fieldName: 'Body' });
let offset = 0;
// Assume for purposes of this example that we buffer the entire file.
const buffer = fs.readFileSync('/driver/body.txt');
// When writing large amounts of data, it is necessary to
// wait for the client-side to complete the previous write
// before writing more data.
const writeData = () => {
let draining = true;
while (offset < buffer.length && draining) {
const remainingBytes = buffer.length - offset;
let chunkSize = 16 * 1024;
if (remainingBytes < chunkSize) {
chunkSize = remainingBytes;
}
draining = writable.write(buffer.slice(offset, offset + chunkSize));
offset += chunkSize;
}
if (offset < buffer.length) {
// Buffer is not draining. Whenever the drain event is emitted
// call this function again to write more data.
writable.once('drain', writeData);
}
};
writeData();
writable = undefined;
});
} catch (e) {
console.log(`Unexpected exception ${e.message}`);
} finally {
if (writable) {
writable.end();
}
}
return result;
};