티스토리 뷰

반응형

이미지 파일을 반환하는 API를 구현하면서 에러가 발생했을 때에는 json 데이터를 반환하도록 했다. 

그런데 성공 시에도 json 데이터로 파일을 반환할 수 없는지 알아보다가 파일 데이터를 String으로 반환할 수 있다는 것을 발견하고 테스트 해 보았다. 

 

java에서 파일 데이터를 반환하고 C#에서 파일을 받아 로컬에 저장하는 소스이다. 

 

 

1) java에서 파일 데이터 반환 : 아래 encodedImage의 값을 json 객체에 담아 반환한다.

String encodedImage = ""; //파일데이터를 담을 String
InputStream inputStream = null;

try{

	inputStream = 삼바파일(SmbFile Object).getInputStream();
	
    //File Object인 경우
	//FileInputStream inputStream = new FileInputStream(File Object);

	byte[] bytes = IOUtils.toByteArray(inputStream);
	encodedImage = Base64.encodeBase64String(bytes); //Base64로 인코딩
}catch(Exception e){
	e.printStackTrace();

	//에러메시지 작성
}finally{
	if(inputStream != null){
		try{
			inputStream.close();
		}catch(Exception err){
			inputStream = null;
        }
    } 
}

 

 

2) C#에서 string을 Image로 변환하여 로컬에 저장 : java에서 전달받은 encodedImage를 Image로 변환한다.

public void stringToImage(string encodedIamge)
{
	
    byte[] imageBytes = Convert.FromBase64String(encodedImage); //Base64디코딩
    MemoryStream ms = new MemoryStream(imageBytes); 

	System.Drawing.Image image = System.Drawing.Image.FromStream(ms);  //Image Object로 변환
    image.Save(로컬저장경로);  //로컬에 저장
}

 

 

3) 위 코드를 실행했을 때 입력에 Base-64가 아닌 문자 또는 세 개 이상의 패딩 문자가 있거나 패딩 문자 사이에 잘못된 문자가 있기 때문에 입력이 유효한 Base-64 문자열이 아닙니다. 라는 에러가 발생한다.

   이 에러에 관련하여 참고한 사이트는 다음과 같다.

  https://stackoverrun.com/ko/q/4097774

  https://stackoverflow.com/questions/44773785/why-base64-encodetostring-split-with-r-n

 

   나의 경우는 위의 에러와 달랐는데, 위의 내용들을 참고하여 java에서 보낸 문자열과 C#에서 받은 문자열의 차이점을 비교하였다. java에서 보낸 문자열을 하드코딩하여 string 변수를 만들어 사용하면 에러없이 메소드가 실행되었다. 

   그러나 C#에서 받은 문자열을 그대로 사용하면 에러가 발생하였다. 문자열을 비교하던 중, C#에서 받은 문자열에 캐리지 리턴 문자(\r\n)가 담겨있는 것을 발견했다. 

 

   그래서 Base64 디코딩 전에 encodedImage = encodedImage.Replace("\\r\\n", ""); 코드를 추가하여 처리해 주었더니 에러없이 이미지가 저장되었다. 

 

 

4) 기타 참고한 사이트

https://okky.kr/article/243786

 

https://hashcode.co.kr/questions/2951/json%EC%97%90-%EC%9D%B4%EB%AF%B8%EC%A7%80%EB%A5%BC-%ED%8F%AC%ED%95%A8%EC%8B%9C%EC%BC%9C%EC%84%9C-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B3%A0-%EC%8B%B6%EC%8A%B5%EB%8B%88%EB%8B%A4

 

https://stackoverflow.com/questions/30818538/converting-json-object-with-bitmaps/30824334#30824334

 

https://stackoverflow.com/questions/1264709/convert-inputstream-to-byte-array-in-java

 

https://stackoverflow.com/questions/17348042/converting-from-string-to-image-in-c-sharp

 

https://pooheaven81.tistory.com/41

 

https://www.codeproject.com/Articles/15460/C-Image-to-Byte-Array-and-Byte-Array-to-Image-Conv

 

https://sdw8001.tistory.com/24

 

https://stackoverflow.com/questions/30398147/how-to-write-image-in-img-tag-in-c-sharp

 

https://social.msdn.microsoft.com/Forums/windows/ko-KR/73cb15de-5bea-4d82-b5ef-821deb09ce44/how-to-save-image-in-folder-in-c-window-application?forum=winforms

 

https://stackoverflow.com/questions/16774024/how-can-i-solver-an-base64-invalid-characters-error/40418816

 

http://blog.naver.com/PostView.nhn?blogId=javaking75&logNo=220549333102&parentCategoryNo=7&categoryNo=&viewDate=&isShowPopularPosts=true&from=search

 

https://stackoverflow.com/questions/7178937/java-bufferedimage-to-png-format-base64-string

 

https://micropilot.tistory.com/2597

 

https://stackoverflow.com/questions/12623548/c-sharp-utf8-decoding-returning-bytes-numbers-instead-of-string

 

https://zephie.tistory.com/11

 

https://stackoverflow.com/questions/13926513/decode-java-encoded-base64-string-in-c-sharp

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함