Javascript 以PNG格式将Oracle Apex画布转换为blob保存到项目

Javascript 以PNG格式将Oracle Apex画布转换为blob保存到项目,javascript,html,oracle,canvas,oracle-apex,Javascript,Html,Oracle,Canvas,Oracle Apex,我正在努力将我的画布URL转换为blob格式,特别是PNG格式。当我在没有转换代码的情况下测试DataURL时,它的生成非常完美,当尝试将其转换为Blob时出现了问题。我使用的是一个html按钮,它用ID buttonTextArea触发JavaScript函数 我需要将Blob文件链接到我的APEX页面项,我使用$s'P9_IMAGE_CODE'Blob格式,当我仅使用文本测试它时,它也可以工作。处理完页面后,该项将被发送到我的表中的blob列中 这是我的密码: $("#buttonTextA

我正在努力将我的画布URL转换为blob格式,特别是PNG格式。当我在没有转换代码的情况下测试DataURL时,它的生成非常完美,当尝试将其转换为Blob时出现了问题。我使用的是一个html按钮,它用ID buttonTextArea触发JavaScript函数

我需要将Blob文件链接到我的APEX页面项,我使用$s'P9_IMAGE_CODE'Blob格式,当我仅使用文本测试它时,它也可以工作。处理完页面后,该项将被发送到我的表中的blob列中

这是我的密码:

$("#buttonTextArea").click(function(dataURL) {
var BASE64_MARKER = ';base64,';
var canvas  = document.getElementById('myCanvas');
var dataURL = canvas.toDataURL();
    if (dataURL.indexOf(BASE64_MARKER) == -1) {
       var parts = dataURL.split(',');
       var contentType = parts[0].split(':')[1];
       var raw = decodeURIComponent(parts[1]);

         return new Blob([raw], {type: contentType});
}

         var parts = dataURL.split(BASE64_MARKER);
         var contentType = parts[0].split(':')[1];
         var raw = window.atob(parts[1]);
         var rawLength = raw.length;

         var uInt8Array = new Uint8Array(rawLength);

            for (var i = 0; i < rawLength; ++i) {
            uInt8Array[i] = raw.charCodeAt(i);
}

     return new Blob([uInt8Array], {type: contentType});
     document.getElementById("textArea").value = dataUrl;


    $s('P9_IMAGE_CODE', Blob); --P9_IMAGE_CODE IS THE ITEM ON MY PAGE
})

我一直在尝试以下例子: 和


提前感谢。

正如Jeffrey指出的,javasscript Blob与Oracle Blob数据类型不同

toDataURL函数已经返回一个base64编码的字符串,所以您需要做的是保存该字符串,然后在提交后将其转换为一个真正的blob。 将其发送到数据库可能有点问题,因为一个项目的内容有32k字节的限制。这意味着您可能必须将字符串分块发送到数据库。这不是一个也有32k限制的VARCHAR2,而是一个CLOB。 正如韦斯利指出的那样,有一些解决办法。这就是一个例子。还有

一旦将base64字符串放入数据库,就必须将其转换为真正的blob。没有内置的方法可以快速实现这一点,但这也是一些人已经解决的问题。 由Tim Hall编写,用于将CLOB转换为BLOB

因此:

在浏览器中,获取dataURL,它是base64编码的字符串 将它分块发送到数据库,在那里它将是一个CLOB 发送完所有内容后,将CLOB转换为BLOB并保存 它在你的桌子上
您所指的Blob是这样的:它不会像那样转换为$s的字符串。它与Oracle BLOB不同。我怀疑您需要编写更多的代码,例如使用FileReader或其他什么,我不知道如何将其转换为适合发布到Apex的格式。是的,这可能是一个很好的起点