2013-04-24 2 views
3

Struts2 애플리케이션의 데이터베이스에 이미지를 삽입하고 싶습니다. 준비된 문을 사용하여 쿼리를 삽입 할Struts 2를 사용하여 데이터베이스에 이미지를 삽입하는 방법 : 파일 태그

  1. 모델 클래스
  2. DAO 클래스 :

    나는 세 가지 클래스를 사용하고 있습니다.

  3. Action 클래스

JSP에서 나는 s:file 태그를 사용하고 있습니다.

내 질문은 : 어떤 유형의 모델 클래스 개인 변수를 사용해야합니까?

데이터베이스에 이미지 저장을 위해 blob type을 사용하고 있습니다. 맞습니까? 그렇지 않다면 제게 제안 해주세요. Srtuts2를 사용하여 데이터베이스에 이미지를 삽입하는 방법은 무엇입니까?

답변

4
이미 Struts2 FileUpload Interceptor를 사용하는 Struts2에 파일을 업로드를 들어

하고

public class UploadAction extends ActionSupport { 
     private File file; 
     private String contentType; 
     private String filename; 

     public void setUpload(File file) { 
     this.file = file; 
     } 

     public void setUploadContentType(String contentType) { 
     this.contentType = contentType; 
     } 

     public void setUploadFileName(String filename) { 
     this.filename = filename; 
     } 

     public String execute() { 
     //... 
     return SUCCESS; 
     } 
} 

당신은

IOUtils.toByteArray(InputStream input); 
처럼 무언가에 의해 byteArrayFile 데이터를 변환 할 수 있습니다 당신의 행동이나 모델 클래스에서 이러한 필드를 정의하는 데 필요한 모든

과 같이 데이터베이스에 Blob으로 저장할 수 있습니다.

Blob blob = connection.createBlob(); 
blob.setBytes(1, bytes); 
+0

세 개의 매개 변수가 동일한 접두어를 사용해야한다고 확신합니다 (http://struts.apache.org/release/2.3.x/struts2-core/apidocs/org/apache/struts2/interceptor/FileUploadInterceptor). html) 그리고 fileName의 N은 대문자이어야합니다 : then'file','fileContentType'과'fileFileName' –

+0

@AndreaLigios 당신과 약간 동의하지만, http : //struts.apache에서 코드 스 니펫을 가져 왔습니다. .org/release/2.3.x/docs/file-upload.html OP 이상으로 처리 할 수 ​​있습니다 –

+0

변수 이름과 다른 Setters를 발견하지 못했습니다 ... 그렇지만이 기능은 작동하지만 그렇지 않습니다. Javabeans를 준수 :/설명서의 이상한 예제 : –

1

fileUpload 인터셉터를 사용하면 <s:file 태그 및 서버로 전송할 수있는 값 데이터가 포함 된 양식을 제출할 때 File 개체를 작업에 넣을 수 있습니다. 업로드가 성공하면 로컬 저장소에서 서버의 해당 데이터를 읽을 수 있습니다. 즉 java.io.tempdir을 사용하여 로컬 저장소의 위치를 ​​설정할 수 있습니다. 그런 다음, CLOB

File file; //this is uploaded file 

FileInputStream is = new FileInputStream(file); 
byte[] data = new byte[is.available()]; 
is.read(data); 
is.close(); 

그런 다음 유형의 모양에 대한 데이터베이스 필드 즉, 유형, BLOB에 해당한다 데이터베이스에 저장하는 데이터를 기록 할 java.sql.Blob 또는 java.sql.Clob 유형을 사용할 수있는 파일의 내용을 읽을 필요 db에서 데이터를 다시 검색 할 때 동일한 java sql 유형이 데이터를 다시 변환하는 데 사용됩니다. 그대로 java.sql.Blob

  • byte[]
  • 로 변환 즉,

    1. 데이터를 보관 : 이제 귀하의 질문에 당신이 데이터베이스 데이터로 채우려 모델에서 그 값을 유지하려면 두 가지 옵션이있다

    두 번째 선택의 경우 byte[] data = getBytes(File file)과 같이 스트림을 열고 파일에서 데이터를 읽거나 Blob이있는 경우 blob.getBytes(pos, length)을 사용해야합니다.

    먼저 스트림을 처리하려면 Blobs setBinaryStream(pos)을 사용하여 업로드 된 파일 데이터를 쓰는 출력 스트림을 얻거나 getBinaryStream()을 사용하여 데이터베이스에서 데이터를 검색하십시오.

    첫 번째 옵션을 사용할 충분한 이유가있을 때까지 두 번째 선택을 사용해야합니다.

    JDBC API를 사용하여 blob을 데이터베이스에 저장하는 예는 here 또는 there입니다. here에서도 좋은 예가 있습니다.