업로드 된 스프레드 시트를 Oracle 데이터베이스 BLOB 열에 저장해야한다는 요구 사항이 있습니다. 사용자가 ADF UI를 사용하여 스프레드 시트를 업로드하면 동일한 스프레드 시트가 DB에 저장되고 나중에 검색됩니다. Google은 POI를 사용하여 스프레드 시트를 처리하고 있습니다. 업로드 된 파일이 byte []로 변환되어 응용 프로그램 서버로 전송됩니다. Appserver는 BLOB 열에도 동일하게 유지됩니다. 하지만 나중에 동일한 내용을 가져 오려고하면 "Excel에서 읽을 수없는 내용이 *****. xlsx에 있습니다"라는 메시지가 나타납니다.이 통합 문서의 내용을 복구 하시겠습니까? 메시지. 이 문제는 에 의해 해결 될 수 있습니다. 바이트 []를 XSSFWorkbook으로 변환하고이를 다시 바이트 []로 변환하여 그대로 유지할 수 있습니다. 하지만 내 요구 사항에 따라 매우 큰 스프레드 시트를 가져올 수 있으며 XSSFWorkbook을 초기화하면 outofmemory 문제가 발생할 수 있습니다. 코드는 바이트 [] 업로드 스프레드 시트BLOB 열에 스프레드 시트 쓰기 POI를 사용하여 스프레드 시트 쓰기
if (uploadedFile != null) {
InputStream inputStream;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
inputStream = uploadedFile.getInputStream();
int c = 0;
while (c != -1) {
c = inputStream.read();
byteArrayOutputStream.write((char) c);
}
bytes = byteArrayOutputStream.toByteArray();
}
아래와 같다 동일한 바이트 [] 아래 블롭 컬럼으로 유지되고 도착. 1.이 바이트 []를 BlobCloumn 에 할당합니다. 2. SQL 업데이트 문을 bolobColumn 으로 업데이트합니다. 3. 명령문을 실행합니다.
위의 단계가 완료되면 다음과 같이 스프레드 시트를 검색하십시오. 1. BlobColumn 을 읽습니다. 2. BlobColumn 바이트에서 바이트 []를 가져옵니다. 3. 응답의 content-type을 설정하여 스프레드 시트를 지원합니다. 4. 바이트 []를 전송하십시오.
하지만 위의 다운로드 한 스프레드 시트를 열면 스프레드 시트 오류가 발생합니다.
UI에서 바이트 []를받은 후 아래 단계를 추가하면 문제가 해결됩니다.
InputStream is = new ByteArrayInputStream(uploadedSpreadSheetBytes);
XSSFWorkbook uploadedWorkbook = new XSSFWorkbook(is);
후 내가 XSSFWorkbook에 바이트 [] 변환 후, [] 중복 다시 바이트로 XSSFWorkbook 변환 느낌
byteArrayOutputStream = new ByteArrayOutputStream();
workbook.write(byteArrayOutputStream);
byte[] spreadSheetBytes = byteArrayOutputStream.toByteArray();
아래와 같이 XSSFWorkbook에서 다시 바이트 []를 파생.
도움을 주시면 감사하겠습니다. 감사합니다. .
어딘가에 손상이 도입되었지만 프로세스가 무엇인지 분명하지 않습니다. 한 번에 한 단계 씩 철자를 기입 한 다음 오류가 발생한 위치를 알려주십시오. 스프레드 시트가 지속되는 방법 및 프로세스에 대한 세부 사항을 포함하십시오. 전환과 동일합니다 : 어떻게하고 있으며, 어떤 과정에서 그렇게하고 있는지. 나의 초기 생각은 POI가'OutputStream'에 쓰는 것이고, 아마도'ByteArrayOutputStream'은'toString()'과 함께 작동 할 것입니다. – jmarkmurphy