입력 폼의 정보+여러 장의 이미지를 바이트 배열로 변환하는 방법【Servlet/JSP】【MySQL】
1. 전제 지식·조건
본 기사에서는, Java, Servlet/JSP, MySQL등의 환경 구축에 대해서, 구축되어 있다고 전제로 하기 때문에 생략합니다.
Java, Servlet, JSP, MySQL에 관한 기초 지식을 전제로 하고 있습니다.
필요한 지식
Java : 목록, 반복자 등
Servlet/JSP : GET/POST, 데이터베이스와의 통신 등
MySQL : Java 소스에서 쿼리를 실행하는 방법 등
참고: 중복 코드일 수 있으므로 양해 바랍니다.
2. 투고의 계기
연수로 Servlet/JSP, MySQL을 사용하여 웹 앱을 구축하게 되어 이미지 처리가 필요했습니다.
MySQL 쪽을 MediamBLOB형으로 하고, 1장의 화상만을 격납·표시시키는 곳까지는, 나름대로 정보가 실려 있어, 비교적 용이했습니다.
하지만, 입력 폼의 텍스트 정보와 함께 되었을 경우, 이미지를 복수매로 했을 경우에 정보가 적게 도착할 때까지 꽤 고생했습니다.
자신의 비망록으로서도, 다른 분의 참고가 되면 좋을까 생각합니다(수요가 있을지는 불명).
3. 이미지 저장
거친 처리의 흐름은 아래 그림과 같습니다.
①Web 브라우저(JSP 파일)의 폼에 정보·화상을 등록
② 송신 버튼을 누르면 Servlet에 등록 정보가 송신된다
③Servlet로 데이터를 취득하고, 화상 데이터를 바이트 배열로 변환한다
④DAO 클래스를 호출하여 MySQL에 저장
※본 기사에서는 ④의 처리를 생략하고 있습니다.
4. 테이블 구성
이번은 간단하게 이미지명 테이블과 이미지 테이블의 2개를 샘플로 합니다(생략에 생략을 거듭하고 있습니다).
여러 이미지를 등록하는 경우 이미지 이름: 이미지 = 1: 많음을 가정합니다.
이미지 이름 테이블
nameId
이름
varchar(4)
varchar(16)
Primary Key
이미지 테이블
nameId
imageId
이미지
varchar(4)
varchar(4)
mediumblob
Primary Key
5. 실제 코드
form.jsp<form action="/test/RegisterServlet" enctype="multipart/form-data" method="post" name="reg" id="regform">
<div>画像名<input type="text" name="imagename"></div>
<div class="inputarea">画像
<input type="file" name="file" id="ItemImage" multiple="multiple" accept="image/*" required >
</div>
<input type="submit" value="登録">
</form>
form 태그 내에서 enctype="multipart/form-data"를 지정하는 것으로, 복수의 데이터형을 취급할 수 있게 됩니다.
RegisterServlet.java//送信されてきた情報の取得
Collection<Part> pa = request.getParts();
//画像名用の変数を宣言
String name;
ArrayList<Part> regImg = new ArrayList<Part>();
//画像データをバイト配列に変換したとき用のリスト
ArrayList<byte[]> imgList = new ArrayList<byte[]>();
//拡張for文でCollection<Part>の中身をすべて取り出す
for(Part p : pa) {
//要素のname属性名が"file"であった場合、画像データ用のリストへ格納
if(p.getName().equals("file")) {
regImg.add(p);
} else {
//画像以外である場合、nameに値を格納
name = request.getParameter(p.getName()); // ※1
}
}
//画像データ格納用のリストの中身をすべて取り出す
for(Part p : regImg) {
//FileInputStream型にキャストする
FileInputStream fis = (FileInputStream) p.getInputStream();
//readAllBytesメソッドでbyte配列に変換する
byte[] bytes = fis.readAllBytes();
//byte配列用のリストに格納する
imgList.add(bytes);
}
//DAOメソッドの呼び出し
}
enctype="multipart/form-data"로 보내져 온 데이터는 Part형으로 보내집니다.
여러 데이터를 보내는 경우 request.getParts 메서드를 사용하여 Collection 형식의 변수에 저장할 수 있습니다.
※1
이번은 이미지명뿐이므로 else문 이하는, 「name = request.getParameter(p.getName())」만이 되어 있습니다.
이미지명 이외의 텍스트도 등록되는 경우는, HashMap등을 선언하고(p.getName(), request.getParameter(p.getName())로(name 속성, 파라미터)와 같이 세트로 저장해 두는 것이 좋습니다.
6. 정리
어땠습니까?
이 기사에서는 브라우저에서 보낸 텍스트와 이미지 데이터를 Servlet에서 받아 바이트 배열로 변환하는 방법을 설명했습니다.
바이트 배열로 변환해 버리면 데이터베이스의 등록은 비교적 용이하기 때문에 절력하고 있습니다.
수요가 있는지 모르겠지만, 나와 같은 일 생각하고 있어, 곤란한 사람이 조금이라도 줄이면 다행입니다.
Reference
이 문제에 관하여(입력 폼의 정보+여러 장의 이미지를 바이트 배열로 변환하는 방법【Servlet/JSP】【MySQL】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ruki-wtnb/items/5426cf58b21e475a4627
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
연수로 Servlet/JSP, MySQL을 사용하여 웹 앱을 구축하게 되어 이미지 처리가 필요했습니다.
MySQL 쪽을 MediamBLOB형으로 하고, 1장의 화상만을 격납·표시시키는 곳까지는, 나름대로 정보가 실려 있어, 비교적 용이했습니다.
하지만, 입력 폼의 텍스트 정보와 함께 되었을 경우, 이미지를 복수매로 했을 경우에 정보가 적게 도착할 때까지 꽤 고생했습니다.
자신의 비망록으로서도, 다른 분의 참고가 되면 좋을까 생각합니다(수요가 있을지는 불명).
3. 이미지 저장
거친 처리의 흐름은 아래 그림과 같습니다.
①Web 브라우저(JSP 파일)의 폼에 정보·화상을 등록
② 송신 버튼을 누르면 Servlet에 등록 정보가 송신된다
③Servlet로 데이터를 취득하고, 화상 데이터를 바이트 배열로 변환한다
④DAO 클래스를 호출하여 MySQL에 저장
※본 기사에서는 ④의 처리를 생략하고 있습니다.
4. 테이블 구성
이번은 간단하게 이미지명 테이블과 이미지 테이블의 2개를 샘플로 합니다(생략에 생략을 거듭하고 있습니다).
여러 이미지를 등록하는 경우 이미지 이름: 이미지 = 1: 많음을 가정합니다.
이미지 이름 테이블
nameId
이름
varchar(4)
varchar(16)
Primary Key
이미지 테이블
nameId
imageId
이미지
varchar(4)
varchar(4)
mediumblob
Primary Key
5. 실제 코드
form.jsp<form action="/test/RegisterServlet" enctype="multipart/form-data" method="post" name="reg" id="regform">
<div>画像名<input type="text" name="imagename"></div>
<div class="inputarea">画像
<input type="file" name="file" id="ItemImage" multiple="multiple" accept="image/*" required >
</div>
<input type="submit" value="登録">
</form>
form 태그 내에서 enctype="multipart/form-data"를 지정하는 것으로, 복수의 데이터형을 취급할 수 있게 됩니다.
RegisterServlet.java//送信されてきた情報の取得
Collection<Part> pa = request.getParts();
//画像名用の変数を宣言
String name;
ArrayList<Part> regImg = new ArrayList<Part>();
//画像データをバイト配列に変換したとき用のリスト
ArrayList<byte[]> imgList = new ArrayList<byte[]>();
//拡張for文でCollection<Part>の中身をすべて取り出す
for(Part p : pa) {
//要素のname属性名が"file"であった場合、画像データ用のリストへ格納
if(p.getName().equals("file")) {
regImg.add(p);
} else {
//画像以外である場合、nameに値を格納
name = request.getParameter(p.getName()); // ※1
}
}
//画像データ格納用のリストの中身をすべて取り出す
for(Part p : regImg) {
//FileInputStream型にキャストする
FileInputStream fis = (FileInputStream) p.getInputStream();
//readAllBytesメソッドでbyte配列に変換する
byte[] bytes = fis.readAllBytes();
//byte配列用のリストに格納する
imgList.add(bytes);
}
//DAOメソッドの呼び出し
}
enctype="multipart/form-data"로 보내져 온 데이터는 Part형으로 보내집니다.
여러 데이터를 보내는 경우 request.getParts 메서드를 사용하여 Collection 형식의 변수에 저장할 수 있습니다.
※1
이번은 이미지명뿐이므로 else문 이하는, 「name = request.getParameter(p.getName())」만이 되어 있습니다.
이미지명 이외의 텍스트도 등록되는 경우는, HashMap등을 선언하고(p.getName(), request.getParameter(p.getName())로(name 속성, 파라미터)와 같이 세트로 저장해 두는 것이 좋습니다.
6. 정리
어땠습니까?
이 기사에서는 브라우저에서 보낸 텍스트와 이미지 데이터를 Servlet에서 받아 바이트 배열로 변환하는 방법을 설명했습니다.
바이트 배열로 변환해 버리면 데이터베이스의 등록은 비교적 용이하기 때문에 절력하고 있습니다.
수요가 있는지 모르겠지만, 나와 같은 일 생각하고 있어, 곤란한 사람이 조금이라도 줄이면 다행입니다.
Reference
이 문제에 관하여(입력 폼의 정보+여러 장의 이미지를 바이트 배열로 변환하는 방법【Servlet/JSP】【MySQL】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ruki-wtnb/items/5426cf58b21e475a4627
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번은 간단하게 이미지명 테이블과 이미지 테이블의 2개를 샘플로 합니다(생략에 생략을 거듭하고 있습니다).
여러 이미지를 등록하는 경우 이미지 이름: 이미지 = 1: 많음을 가정합니다.
이미지 이름 테이블
nameId
이름
varchar(4)
varchar(16)
Primary Key
이미지 테이블
nameId
imageId
이미지
varchar(4)
varchar(4)
mediumblob
Primary Key
5. 실제 코드
form.jsp<form action="/test/RegisterServlet" enctype="multipart/form-data" method="post" name="reg" id="regform">
<div>画像名<input type="text" name="imagename"></div>
<div class="inputarea">画像
<input type="file" name="file" id="ItemImage" multiple="multiple" accept="image/*" required >
</div>
<input type="submit" value="登録">
</form>
form 태그 내에서 enctype="multipart/form-data"를 지정하는 것으로, 복수의 데이터형을 취급할 수 있게 됩니다.
RegisterServlet.java//送信されてきた情報の取得
Collection<Part> pa = request.getParts();
//画像名用の変数を宣言
String name;
ArrayList<Part> regImg = new ArrayList<Part>();
//画像データをバイト配列に変換したとき用のリスト
ArrayList<byte[]> imgList = new ArrayList<byte[]>();
//拡張for文でCollection<Part>の中身をすべて取り出す
for(Part p : pa) {
//要素のname属性名が"file"であった場合、画像データ用のリストへ格納
if(p.getName().equals("file")) {
regImg.add(p);
} else {
//画像以外である場合、nameに値を格納
name = request.getParameter(p.getName()); // ※1
}
}
//画像データ格納用のリストの中身をすべて取り出す
for(Part p : regImg) {
//FileInputStream型にキャストする
FileInputStream fis = (FileInputStream) p.getInputStream();
//readAllBytesメソッドでbyte配列に変換する
byte[] bytes = fis.readAllBytes();
//byte配列用のリストに格納する
imgList.add(bytes);
}
//DAOメソッドの呼び出し
}
enctype="multipart/form-data"로 보내져 온 데이터는 Part형으로 보내집니다.
여러 데이터를 보내는 경우 request.getParts 메서드를 사용하여 Collection 형식의 변수에 저장할 수 있습니다.
※1
이번은 이미지명뿐이므로 else문 이하는, 「name = request.getParameter(p.getName())」만이 되어 있습니다.
이미지명 이외의 텍스트도 등록되는 경우는, HashMap등을 선언하고(p.getName(), request.getParameter(p.getName())로(name 속성, 파라미터)와 같이 세트로 저장해 두는 것이 좋습니다.
6. 정리
어땠습니까?
이 기사에서는 브라우저에서 보낸 텍스트와 이미지 데이터를 Servlet에서 받아 바이트 배열로 변환하는 방법을 설명했습니다.
바이트 배열로 변환해 버리면 데이터베이스의 등록은 비교적 용이하기 때문에 절력하고 있습니다.
수요가 있는지 모르겠지만, 나와 같은 일 생각하고 있어, 곤란한 사람이 조금이라도 줄이면 다행입니다.
Reference
이 문제에 관하여(입력 폼의 정보+여러 장의 이미지를 바이트 배열로 변환하는 방법【Servlet/JSP】【MySQL】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Ruki-wtnb/items/5426cf58b21e475a4627
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<form action="/test/RegisterServlet" enctype="multipart/form-data" method="post" name="reg" id="regform">
<div>画像名<input type="text" name="imagename"></div>
<div class="inputarea">画像
<input type="file" name="file" id="ItemImage" multiple="multiple" accept="image/*" required >
</div>
<input type="submit" value="登録">
</form>
//送信されてきた情報の取得
Collection<Part> pa = request.getParts();
//画像名用の変数を宣言
String name;
ArrayList<Part> regImg = new ArrayList<Part>();
//画像データをバイト配列に変換したとき用のリスト
ArrayList<byte[]> imgList = new ArrayList<byte[]>();
//拡張for文でCollection<Part>の中身をすべて取り出す
for(Part p : pa) {
//要素のname属性名が"file"であった場合、画像データ用のリストへ格納
if(p.getName().equals("file")) {
regImg.add(p);
} else {
//画像以外である場合、nameに値を格納
name = request.getParameter(p.getName()); // ※1
}
}
//画像データ格納用のリストの中身をすべて取り出す
for(Part p : regImg) {
//FileInputStream型にキャストする
FileInputStream fis = (FileInputStream) p.getInputStream();
//readAllBytesメソッドでbyte配列に変換する
byte[] bytes = fis.readAllBytes();
//byte配列用のリストに格納する
imgList.add(bytes);
}
//DAOメソッドの呼び出し
}
어땠습니까?
이 기사에서는 브라우저에서 보낸 텍스트와 이미지 데이터를 Servlet에서 받아 바이트 배열로 변환하는 방법을 설명했습니다.
바이트 배열로 변환해 버리면 데이터베이스의 등록은 비교적 용이하기 때문에 절력하고 있습니다.
수요가 있는지 모르겠지만, 나와 같은 일 생각하고 있어, 곤란한 사람이 조금이라도 줄이면 다행입니다.
Reference
이 문제에 관하여(입력 폼의 정보+여러 장의 이미지를 바이트 배열로 변환하는 방법【Servlet/JSP】【MySQL】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Ruki-wtnb/items/5426cf58b21e475a4627텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)