web-dev-qa-db-ja.com

byte []を画像に変換し、jspに表示します

アップロードされた画像(現在はバイト配列)をjspページに表示しようとしています。これで、byte []列がデータベースに存在し、画像に変換する必要があります。

これは私が試していることです:

Jspページの表の一部:

<c:forEach var="user" items="${userList}">
    <tr>
        <td>${user.fileName}</td>
        <td>
            <img src="data:image/jpg;base64,${user.imageFile}" alt="No image">
        </td>

MultipartFileオブジェクトからバイトの配列を取得するコントローラーの一部:

@RequestMapping(value = "/register", method = RequestMethod.POST)
    public ModelAndView userRegister(@ModelAttribute("user") @Valid User user, BindingResult result, ModelMap model, @RequestParam("fileData") MultipartFile fileData) throws Exception {

            if (!fileData.isEmpty() && fileData != null) {                

                byte[] bytes = fileData.getBytes();
                user.setFileName(fileData.getOriginalFilename());
                user.setImageFile(bytes);
            }
        }

追加情報が必要な場合は、お知らせください。ありがとう。

6
MJM

Userにtranisentbase64imageFileプロパティを追加できます。これは、画像のbase64でエンコードされた文字列を保持します。これは、次のようにjspでアクセスできます。

<img alt="img" src="data:image/jpeg;base64,${user.base64imageFile}"/>

そして、あなたの方法では、エンコーディングを行う必要があります。

@RequestMapping(value = "/register", method = RequestMethod.POST)
    public ModelAndView userRegister(@ModelAttribute("user") @Valid User user, BindingResult result, ModelMap model, @RequestParam("fileData") MultipartFile fileData) throws Exception {
        if (!fileData.isEmpty() && fileData != null) {                
            byte[] bytes = fileData.getBytes();
            user.setFileName(fileData.getOriginalFilename());
            user.setImageFile(bytes);
            byte[] encodeBase64 = Base64.encodeBase64(bytes);
            String base64Encoded = new String(encodeBase64, "UTF-8");
            user.setBase64image(base64encoded);
        }
    }

IOUtilsBase64org.Apache.commonsの便利なutilクラスであり、問​​題なく見つけることができます。

16
Master Slave