我已经进行了大量研究,并且在尝试执行的单个步骤中有很多信息,但是由于我不知道我不正确的过程的哪一部分,因此决定描述整个问题。< / p>
我们正在用JSF和Java构建用于大学的Web应用程序。其中一部分是徽标的上载,该徽标必须以字符串形式存储在数据库中,然后再次从数据库中读取并显示在网站上。显示过程似乎工作正常,但我无法正常进行上传。
这是网站上输入表单的.xhtml代码:
<h:form enctype="multipart/form-data">
<h:inputFile id="i_logo" value="#{systemConfigBean.logo}"
<f:ajax listener="#{systemConfigBean.upload}" render="@form"/>
</h:inputFile>
</h:form>
Scanner
在备用bean upload()
的{{1}}方法中读取所选文件。传递到DAO层的DTO systemConfigBean
具有organisationData
属性,徽标存储在该属性中,如下所示:
byte[]
DAO将其转换为Base64字符串,并将该字符串放入数据库中。字符串是这样创建的:
Scanner scanner = new Scanner(logo.getInputStream());
String fileContent = scanner.useDelimiter("\\A").next();
scanner.close();
organisationData.setLogo(fileContent.getBytes());
到目前为止,必须有一个转换错误,因为如果我们仅将Base64编码的图像放到数据库中,则显示过程将起作用。由于我们可能是错误的,并且解码和显示可能存在缺陷,因此我们将如何处理该部分:
在DAO中:
String encodedImage = Base64.getEncoder().encodeToString(organisation.getLogo())
在HTTP-Servelet中:
organisationData.setLogo(Base64.getDecoder().decode(encodedImage))
所以我的问题是,如何在不更改DTO属性response.setContentType(getServletContext().getMimeType(""));
response.setContentLength(logo.length);
response.getOutputStream().write(organisationData.getLogo());
的数据类型或对体系结构进行任何其他更改的情况下正确获得转换?
由于这是我在该论坛上的第一篇文章,并且我随时欢迎改进建议,因此,如果您对我如何改善自己的文章有任何意见,请告诉我。