我的客户端代码处理画布绘图,我使用javascript生成形状的blob zip文件。 我想在服务器端使用zip。但是,我无法找到任何解决方案。
我尝试过使用远程命令,但是使用它我只能将字符串参数传递给JSF bean。 我尝试以某种方式破解primefaces fileUpload插件,以便我可以将我的blob传递给支持bean,但这也没有用。
答案 0 :(得分:3)
您可以通过将blob编码为某些字符串表示形式将blob从JavaScript传递到JSF bean,例如,传递给 Base64 并将其传递给Primefaces p:remoteCommand
,然后将其发送到托管bean,最后将其解码回字节数组。
程序如下:
将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 reffer到此接受的answer)
将p:remoteCommand添加到您的页面
<p:remoteCommand name="sendBlobBase64"
actionListener="#{yourBean.onBlobBase64Sent}" process="@this"/>
在名为 yourBean 的托管bean中,您可以使用
来捕获它public void onBlobBase64Sent() {
String blobBase64 = (String)FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("blobBase64Name");
byte[]blob=java.util.Base64.getDecoder().decode(blobBase64);
}