【问题标题】:How to pass a blob created in javascript to JSF bean如何将在 javascript 中创建的 blob 传递给 JSF bean
【发布时间】:2017-11-15 15:36:02
【问题描述】:

我的客户端代码处理画布绘图,我使用 javascript 生成形状的 blob zip 文件。 我想在服务器端使用 zip。但是,我找不到任何解决方案。

我尝试过使用远程命令,但使用它我只能将字符串参数传递给 JSF bean。 我尝试以某种方式破解 primefaces fileUpload 插件,以便我可以将我的 blob 传递给支持 bean,但这也没有成功。

【问题讨论】:

    标签: javascript jsf primefaces


    【解决方案1】:

    您可以将 blob 从 JavaScript 传递到 JSF bean,方法是将 blob 编码为某种字符串表示形式,例如,传递到 Base64 并将其传递给 Primefaces p:remoteCommand,将其发送到托管 bean,最后对其进行解码回到字节数组。

    程序如下:

    1. 将 blob 转换为 Base64

       function prepareAndSendBlobToManagedBean(){
                  //zipped file as blob
                  var blob=...;
                  ///convert blob to Base64 string
                  var blobBase64String=convertToBase64(blob);
                  sendBlobBase64([{name : 'blobBase64Name', value : blobBase64String}]);
              }
      

    (用于从 blob 转换为 base64 参考这个接受的answer)

    1. 将 p:remoteCommand 添加到您的页面

      <p:remoteCommand name="sendBlobBase64" 
                       actionListener="#{yourBean.onBlobBase64Sent}" process="@this"/>
      
    2. 在名为 yourBean 的托管 bean 中,您可以使用

      public void onBlobBase64Sent() {
         String blobBase64 = (String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("blobBase64Name");
         byte[]blob=java.util.Base64.getDecoder().decode(blobBase64);
      }
      

    【讨论】:

    • 感谢您的帮助。我能够使用base64。但是我现在遇到了问题(当blob很大时(java堆空间)。有没有一种机制,我可以使用字节流,而不是RequestParameterMap中的String
    • @AshishMathew,我想,在这种情况下,您将需要实现某种“逐块”文件上传过程。我建议您为此创建另一个问题或搜索 SO 以获取想法。
    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 2017-02-07
    • 2011-02-02
    • 2019-09-27
    • 2015-01-07
    相关资源
    最近更新 更多