등 :JSP, 자바 스크립트 : 디스플레이 바이트 [] 이미지
<div class="col-md-6 form-group">
<input type='file' name="image" onchange="readURL(this);"
class="form-control" />
<img id="userimg" src="#" alt="" />
</div>
의 .js :
내 서블릿에서function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#userimg')
.attr('src', e.target.result)
.width(150)
.height(200);
};
reader.readAsDataURL(input.files[0]);
}
}
나는 변환을 파일을 byte[]
:
(request.getParameter("image")).getBytes()
으로 변경하여 데이터베이스에 삽입하십시오.
그런 다음,이처럼 .jsp로 페이지에서 데이터베이스와 디스플레이에서 읽어보십시오
.jsp를
<div class="panel panel-success">
<h2>Pictures</h2>
<%
List<byte[]> pics = PictureTable.getConcertPictures(concertBean.getId());
%>
<%
for (byte[] p : pics) {
String encoded = ImageHelper.encodeImage(p);
%>
<img src="data:image/jpg;base64,<%=encoded%>">
<%
}
%>
</div>
ImageHelper.java :
public static String encodeImage(byte[] img) {
return Base64.encode(img);
}
하지만, 이미지가 표시되지 않습니다 (뭔가가 데이터베이스에 삽입됩니다).
편집:
.jsp로 :
<div class="comments">
<div class="panel panel-success">
<h2>Pictures</h2>
<%
List<byte[]> pics = PictureTable.getConcertPictures(concertBean.getId());
%>
<%
for (byte[] p : pics) {
String encoded = ImageHelper.encodeImage(p);
%>
<img src="data:image/jpg;base64,<%=encoded%>">
<%
}
%>
</div>
<!-- /container -->
<form
action="GalleryController?action=add_concert_picture&concertID=<%=concertBean.getId()%>"
method="post" class="panel panel-success"
enctype="multipart/form-data">
<div class="col-md-6 form-group">
<input type='file' name="image" class="form-control" />
</div>
<button type="submit" class="btn">Submit</button>
</form>
</div>
서블릿 :
Part filePart = request.getPart("image");
InputStream fileContent = filePart.getInputStream();
PictureTable.insertConcertPicture(cid, user.getUser().getId(), fileContent);
PictureTable.java :
내 코드를 수정 한
public static void insertConcertPicture(int concertId, int userId, InputStream photo) {
try (Connection connection = ConnectionPool.getConnectionPool().checkOut()) {
PreparedStatement ps = connection
.prepareStatement("INSERT INTO concertphototable(ConcertId, UserId, Photo) VALUES(?,?,?)");
...
ps.setBinaryStream(3, photo);
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
이미지가 여전히 올바르게 표시되지 않지만 페이지의 "제출"부분이 보이지 않습니다.
Base64 인코딩이없는 응답에 직접 바이트를 쓰고 그 imple 태그 URL을 해당 서블릿에 직접 가리 키지 않는 이유는 무엇입니까? – tsolakp
'Base64.getEncoder(). encode (img)'를 사용하면 어떻게됩니까? 또한 이미지가 JPEG로되어 있는지 확인 했습니까? – pyb
@ pyb 확실히 JPG. 확인했는데 인코딩 된 것은 사진의 이름입니다. 나는'encode (img)'가 반환 한 것을 디코딩하고, 내 파일의 이름을 얻었다. – Eutherpy