티스토리 뷰

반응형

호출 시 주어진 파라미터를 가지고 이미지 주소를 조사한 후 이미지 썸네일 파일을 반환하는 API를 생성했다. 

이미지 썸네일 파일(삼바파일)을 구한 후 http 통신을 통해 이미지 파일을 반환하는 소스이다.

 


InputStream inputStream = null; 
OutputStream outStream = null; 

try{ 
	SmbFile smbf = 전송할 삼바파일 준비;
    	ServletContext context = request.getSession().getServletContext();
	inputStream = smbf.getInputStream();

	//File인 경우
    	//File file = 전송할 파일 준비;
	//FileInputStream inputStream = new FileInputStream(file);

	String mimeType = "image/jpeg";  //썸네일 파일이 jpg이기 때문에 이렇게 지정한다.
	//다른 파일인 경우 적절한 MimeType을 확인하여 지정해준다.
	//https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types

	response.setContentType(mimeType);
	response.setContentLength((int) 삼바파일.length());

	String headerKey = "Content-Disposition";
	String headerValue = String.format("attachment; filename=\"%s\"", 파일명);
	response.setHeader(headerKey, headerValue);

	outStream = response.getOutputStream();

	byte[] buffer = new byte[4096];
	int bytesRead = -1; 
	while ((bytesRead = inputStream.read(buffer)) != -1) { 
		outStream.write(buffer, 0, bytesRead);
	}
}catch(Exception e){
	e.printStackTrace();

	//에러가 발생했을 때에는 JSONObject 형식의 응답값을 반환한다.
	JSONObject result = new JSONObject();
	result.put("code", 100);
	result.put("message", "에러가 발생했습니다."); 

	response.setContentType("application/json");
	response.setCharacterEncoding("UTF-8");
	response.setContentLength(result.toString().getBytes("UTF-8").length);

	//getBytes를 할 때 encoding 타입에 따라 length 값이 달라질 수 있다.  
	//ContentLength 값을 설정하지 않으면 응답값이 전송되지 않을 수 있다. 
	//parameter의 크기가 설정된 ContentLength 값보다 클 경우 응답값이 잘리거나 전송되지 않을 수 있다.

	response.getWriter().print(result);
}finally{
	if(inputStream != null){
		try{
			inputStream.close();
		}catch(Exception err){
			inputStream = null;
		}
	}

	if(outStream != null){
		try{
			outStream.close();
		}catch(Exception err){
			outStream = null;
		}
	}
}

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함