首页 > 解决方案 > 不正确的响应 mime 类型(预期的 'application/wasm)PSPDFKIT 和保留的大小不足以包含签名问题 oracle apex?

问题描述

我遵循了 PSPDFKit 独立集成步骤,以及公共目录中的所有文件(Apache tomcat 中的文件夹“i”),

我得到“PSPDFKit for Web 已成功加载!” 消息,但它挂断了,控制台给了我一个错误:-

Failed to execute 'compile' on 'WebAssembly': Incorrect response MIME type. Expected 'application/wasm'.

当我尝试添加数字签名时也遇到了这个问题

Cannot add the container structure because the reserved size is not enough to contain the signature. Available size 8193, actual size 89694

我通过下面的代码尝试过

PSPDFKit.load({
        container: "#pspdfkit",
        document: 'f?p=&APP_ID.:0:&APP_SESSION.:APPLICATION_PROCESS=PREVIEW_FILE:::FILE_ID:'  + apex.item('P6_ID').getValue(),
        licenseKey: "",
    initialViewState: new PSPDFKit.ViewState({
      showSignatureValidationStatus:
        PSPDFKit.ShowSignatureValidationStatusMode.IF_SIGNED
    }),
     async trustedCAsCallback() {
    
      const response = await fetch("http://localhost:90/i/certs/ca.pem");
      const cert = await response.text();
      return [cert];
    }
})   

.then(function(instance) {
    
var item = {
  type: "custom",
  id: "my-button",
  title: "digital sign",
  onPress: function(event) {
      instance
  .signDocument(null, generatePKCS7)
  .then(() => {
    console.log("document signed.");
  })
    

  .catch(error => {
    console.error("The document could not be signed.", error);
  });

  }
};
if (app_user =="aaaa") {
instance.setToolbarItems(function(items) {
  items.push(item);
  return items;
});
}
   function generatePKCS7({ fileContents }) {
  const certificatePromise = fetch("http://localhost:90/i/certs/certificate.pem").then(response =>
    response.text()
  );
  const privateKeyPromise = fetch("http://localhost:90/i/certs/private-key.pem").then(response =>
    response.text()
  );
  return new Promise((resolve, reject) => {
    Promise.all([certificatePromise, privateKeyPromise])
      .then(([certificatePem, privateKeyPem]) => {
        const certificate = forge.pki.certificateFromPem(certificatePem);
        const privateKey = forge.pki.privateKeyFromPem(privateKeyPem);
        const p7 = forge.pkcs7.createSignedData();
        p7.content = new forge.util.ByteBuffer(fileContents);    
        p7.addCertificate(certificate);
        p7.addSigner({
          key: privateKey,
          certificate: certificate,
          digestAlgorithm: forge.pki.oids.sha256,
          authenticatedAttributes: [
            {
              type: forge.pki.oids.contentType,
              value: forge.pki.oids.data
            },
            {
              type: forge.pki.oids.messageDigest
            },
            {
              type: forge.pki.oids.signingTime,
              Value: new Date()
            }
          ]
        }
           );

        p7.sign({ detached: true })
        
        const result = stringToArrayBuffer(
          forge.asn1.toDer(p7.toAsn1()).getBytes()
        );
        resolve(result);
        
      })
      .catch(reject);
  });
}

function stringToArrayBuffer(binaryString) {
  const buffer = new ArrayBuffer(binaryString.length);
  let bufferView = new Uint8Array(buffer);
  for (let i = 0, len = binaryString.length; i < len; i++) {
    bufferView[i] = binaryString.charCodeAt(i);
  }

  return buffer;
}

})

        .catch(function(error) {
          console.error(error.message);
        })



apex version 19.2 
tomcat 8.5 ,
ords

标签: javascriptoracle-apex

解决方案


看起来 WASM 文件的内容类型不正确。解决方案是修复您的服务器以返回正确的内容类型或在加载 PSPDFKit 时禁用 WebAssembly 的流式实例化,如下所述:https ://pspdfkit.com/guides/web/current/troubleshooting/common-issues/#response -has-unsupported-mime-type-error

将来,请联系https://pspdfkit.com/support/request,我们的支持团队将在那里为您提供帮助。


推荐阅读