Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File upload HCL Domino AppDevPack-写入除.txt以外的附件时出现问题_File Upload_Lotus Domino_Hcl_Domino Appdev Pack - Fatal编程技术网

File upload HCL Domino AppDevPack-写入除.txt以外的附件时出现问题

File upload HCL Domino AppDevPack-写入除.txt以外的附件时出现问题,file-upload,lotus-domino,hcl,domino-appdev-pack,File Upload,Lotus Domino,Hcl,Domino Appdev Pack,我使用此代码(假设已建立到数据库的连接): 但是在附件之后,如果附件的类型不是txt(例如:jpg、pdf等),则无法读取它,即使是从Notes客户端读取,也会产生读取错误 我比较了txt类型的一个文件和另一个文件的$File字段的属性,除了该文件的属性之外,没有其他区别 我使用的是带有IBM Domino(r)服务器(64位)、10.0.1FP3版和AppDevPack 1.0.3版的Windows系统 提前感谢您的帮助您能分享一些代码吗?或者升级到FP4并使用最新版本(1.0.4) 如果没有

我使用此代码(假设已建立到数据库的连接):

但是在附件之后,如果附件的类型不是txt(例如:jpg、pdf等),则无法读取它,即使是从Notes客户端读取,也会产生读取错误

我比较了txt类型的一个文件和另一个文件的$File字段的属性,除了该文件的属性之外,没有其他区别

我使用的是带有IBM Domino(r)服务器(64位)、10.0.1FP3版和AppDevPack 1.0.3版的Windows系统


提前感谢您的帮助

您能分享一些代码吗?或者升级到FP4并使用最新版本(1.0.4)

如果没有正确升级domino db客户端,您可能会遇到的一个问题是缓冲区与U8Int阵列的使用。

在1.0.3中,我支持使用缓冲区来避免写入时的问题,但是在读取时有第二个参数来获取缓冲区。

所以你说你只需调用一次就可以用流来编写附件。。。如果您再次调用以使用另一个流写入附件,则无论文件是什么,都无法读取?否,如果附件类型为txt,则可以读取,否则无法读取,每次只有一个附加文件,我们的内部测试正按照您描述的那样,通过图像写入、读取和验证往返数据。我在我的帖子中添加了代码,这是非常基本的。我将尝试1.0.4版,但我并不真的相信它,因为它应该已经在1.0.3版中工作了…这个问题对于我们已经修复的东西来说非常熟悉。运行proton并上载二进制附件(如图像)的Windows服务器。microsoft有一些奇怪的代码解释换行符并将其更改为\r\n。我很确定我们在1.0.3中修复了这个问题,但请检查1.0.4是否正常工作,domino db节点模块是否最新(删除节点_模块中的旧模块),以及服务器上的proton二进制文件是否已正确替换。我已将domino realease升级到10.0.1FP4,proton(来源:1001-proton-addin-0.6.1.zip)nodejsdominodb模块(来源:domino-domino-db-1.5.18.tgz)到1.0.4。然后,我测试了完全相同的代码,它工作正常,所有文件类型(jpg,pdf,…)都可以在附件后读取。谢谢你的帮助!我已经将DominoRealease升级到10.0.1FP4,Proton(来源:1001-Proton-addin-0.6.1.zip)和NodeJs Domino db模块(来源:Domino-Domino-db-1.5.18.tgz)升级到1.0.4。然后,我测试了完全相同的代码,它工作正常,所有文件类型(jpg,pdf,…)都可以在附件后读取。我补充说,导致1.0.3上出现GrpcError的行“draining=writable.write(buffer.slice(offset,offset+chunkSize)),现在可以工作了,因此不再需要查看“Uint8Array”了,谢谢您的帮助!
const fs = require('fs');

let docUnid = "F09C0DB42276F208C1258513005722D1";
let sFilename = fileSamplePdf.pdf; // !!! Does not work for reading after attachment !!!
// let sFilename = fileSampleTxt.txt; !!! Work for reading after attachment !!!

let buffer = fs.readFileSync("/tmp/" + sFilename);
const writable = await database.bulkCreateAttachmentStream({});
writable.on('error', e => {
  console.error("Error on write File", e);
});
writable.on('response', response => {
  console.log("File " + sFilename + " saved to doc " + docUnid);
});
let offset = 0;
const writeRemaining = () => {
  if (error) {
    return;
  }
  let draining = true;
  while (offset < buffer.length && draining) {
    const remainingBytes = buffer.length - offset;
    let chunkSize = 16 * 1024;
    if (remainingBytes < chunkSize) {
      chunkSize = remainingBytes;
    }
    const chunk = new Uint8Array(
      buffer.slice(offset, offset + chunkSize),
    );
    draining = writable.write(chunk);
    //draining = writable.write(buffer.slice(offset, offset + chunkSize)); !!! Does not work, generate a GrpcError !!!
    offset += chunkSize;
  }
  if (offset < buffer.length) {
    writable.once('drain', writeRemaining);
  } else {
    writable.end();
  }
};
writable.file({
  unid: docUnid,
  fileName: sFilename,
});
writeRemaining();
Field Name: $FILE
Data Type: Attached Object
Data Length: 57 bytes
Seq Num: 100
Dup Item ID: 0
Field Flags: ATTACH SIGN SEAL SUMMARY 

Object Type: File
Object ID: 00000266
Object Length: 486481
File Name: fileSamplePdf.pdf
Flags: 
Host: UNKNOWN
Compression Type: NONE 
Encoding Type: 
File Attributes: RW PUBLIC 
File Size: 486481
File Created: 15/04/2020 16:56:08
File Modified: 15/04/2020 16:56:08