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[]
로 변환 즉,
- 데이터를 보관 : 이제 귀하의 질문에 당신이 데이터베이스 데이터로 채우려 모델에서 그 값을 유지하려면 두 가지 옵션이있다
두 번째 선택의 경우 byte[] data = getBytes(File file)
과 같이 스트림을 열고 파일에서 데이터를 읽거나 Blob
이있는 경우 blob.getBytes(pos, length)
을 사용해야합니다.
먼저 스트림을 처리하려면 Blobs setBinaryStream(pos)
을 사용하여 업로드 된 파일 데이터를 쓰는 출력 스트림을 얻거나 getBinaryStream()
을 사용하여 데이터베이스에서 데이터를 검색하십시오.
첫 번째 옵션을 사용할 충분한 이유가있을 때까지 두 번째 선택을 사용해야합니다.
JDBC API를 사용하여 blob을 데이터베이스에 저장하는 예는 here 또는 there입니다. here에서도 좋은 예가 있습니다.
세 개의 매개 변수가 동일한 접두어를 사용해야한다고 확신합니다 (http://struts.apache.org/release/2.3.x/struts2-core/apidocs/org/apache/struts2/interceptor/FileUploadInterceptor). html) 그리고 fileName의 N은 대문자이어야합니다 : then'file','fileContentType'과'fileFileName' –
@AndreaLigios 당신과 약간 동의하지만, http : //struts.apache에서 코드 스 니펫을 가져 왔습니다. .org/release/2.3.x/docs/file-upload.html OP 이상으로 처리 할 수 있습니다 –
변수 이름과 다른 Setters를 발견하지 못했습니다 ... 그렇지만이 기능은 작동하지만 그렇지 않습니다. Javabeans를 준수 :/설명서의 이상한 예제 : –