将图像作为字符串转换为byte [],然后再转换为Base64编码的字符串

时间:2018-12-15 12:15:16

标签: java jsf type-conversion

我已经进行了大量研究,并且在尝试执行的单个步骤中有很多信息,但是由于我不知道我不正确的过程的哪一部分,因此决定描述整个问题。< / 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()); 的数据类型或对体系结构进行任何其他更改的情况下正确获得转换?

由于这是我在该论坛上的第一篇文章,并且我随时欢迎改进建议,因此,如果您对我如何改善自己的文章有任何意见,请告诉我。

0 个答案:

没有答案