2012-12-04 3 views
0

이 프로젝트는 재미있을 것이라고 생각했지만 문제가되었습니다. :(오라클에 이미지로드 및 서블릿 검색

나는 Oracle 테이블에 일부 이미지를로드 한 후 나중에 서블릿을 통해 최대 절전 모드로를 검색 할 수 있습니다.

그래서 여기에 이미지를 삽입 로더의 일부입니다.

String imageFileName = row[col++]; 
    String ext = imageFileName.substring(imageFileName.lastIndexOf('.') + 1); 
    String imageFilePath = imageDir + imageFileName; 
    String mimeType = "image/" + ext; 
    image.setImageType(mimeType); 

    Image found = imageDAO.retrieve(imageId); 
    if(found==null){ 
    //create a new one 
    byte[] bytes = loadImage(imageFilePath, mimeType); 
    image.setImageData(bytes); 
    image = imageDAO.create(image); 
    ++created; 
    } 
    else{ 
    //check if an update is needed 
    if(updateDate.after(found.getUpdated())){ 
     byte[] bytes = loadImage(imageFilePath, mimeType); 
     found.setImageData(bytes); 
     found.setUpdated(updateDate); 
     image = imageDAO.update(found); 
     ++updated; 
    } 
    } 
} 

@Override 
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { 
    String imageId = request.getParameter(KeyNames.PARM_IMAGE_ID); 
    if(imageId==null){ 
     throw new NullPointerException("Image ID parameter is required"); 
    } 

    Image image = getImageDAO().retrieve(imageId); 
    if(image==null){ 
     throw new IllegalArgumentException(imageId + " is not a valid image ID"); 
    } 

    response.setContentType(image.getImageType()); 
    response.getOutputStream().write(image.getImageData()); 
    response.getOutputStream().close(); 

    return null; 
    } 

나에게 간단한 것 같은데,하지만 난 내 브라우저를 사용하여 URL을 쳤을 때, 내가 얻을 :

여기 서블릿 내장입니다 서블릿이 성공적으로 포장되어 있기 때문에

는 "이 오류를 포함하고 있기 때문에 이미지 [URL]을 표시 할 수 없습니다", 나는 로딩 또는 검색하는 중, 나는 이미지 데이터를 손상 한 것을 생각해야합니다. 나는 다음에해야할 일에 대해 추측을하지 않으므로 조언을 듣는 것이 좋습니다.

+0

일반적으로 이미지를 db에 저장하지 않지만 이름/ID/경로 만 저장합니다. –

답변

0

나에게 수치! 이것은 실제로 그것이 무엇을하는지 알아 내기 위해 그것을 공부하지 않고 인터넷에서 코드를 실행하기 위해 얻는 것입니다!

그래서 대답은 DB에 저장하기 위해 쓰기 가능한 래스터를 통해 이미지를 실행하고 있다는 것이 었습니다. 음, 아! 이미지를 래스터 화하면 더 이상 png가 아닙니다.

그래서 나는 입력 파일에서 바이트 복사본을 작성하고 그것을 BLOB에 저장하면 정상적으로 작동합니다.

지금 나를 쏴.

도움 주셔서 감사합니다.