응용 프로그램에서 최근에 발견 된 문제를 분석하려고 시도한 결과 FileInputStream
에서 작동하려고했기 때문에 inputStream.reset()
메서드가 실패했습니다.Struts DiskFile.getInputStream()은 파일 크기가 변경 될 때 ByteArrayInputStream 및 FileArrayInputStream을 반환합니다.
아파치의 DiskFile.getInputStram()
인스턴스는 특정 파일 크기 임계 값을 기준으로 ByteArrayInputStream
인스턴스 (지원됨) 또는 FileInputStream
(지원되지 않음) 인스턴스를 반환합니다.
나는이되는 InputStream을 얻을해야하는 코드는 다음과 같습니다
FormFile file = multipartForm.getFiles().get(0); // It's always one file
InputStream is = file.getInputStream();
// Read the stream and did job
// Now I want to reset it.
// bad coding from my side because I didn't check markSupported
is.reset();
// Got IO error immediately after this. But anything below 256KB is ok
나는이 언급 확신/오라클 JDK의 문서 또는 아파치 사이트의 어딘가에 설명했다. 어떤 참고 문헌도 기억하지 못하는 것 같습니다. 이 행동이 타당한 지 아는 사람이 있습니까?
그래서'DiskFile.getInputStram()가''InputStream'과 기본을 반환 그것의 구현은 파일의 크기에 따라'ByteArrayInputStream' 또는'FileInputStream'입니까? – Eugene
예 - 테스트 결과가 올 바르면 Windows에서 256KB를 초과하는 항목은 FileInputStream 구현을 반환하지만 더 낮은 크기는 ByteArrayInputStream이됩니다. – ha9u63ar
소스를 확인할 수 있습니까? 여기 https://svn.apache.org/repos/asf/struts/struts1/tags/STRUTS_1_2_1/src/share/org/apache/struts/upload/DiskFile.java를 찾고 있는데이 경우가 아닙니다. – Eugene