pdf 파일을 메모리에 있는 그대로 전문을 만들기,.

api 서버에 파일 업로드 할 때 필요한 1줄로 된 문자열(전문) 텍스트 파일을 만들고 있습니다.

이 전문에는 pdf 파일의 내용을 담아줘야하는데요.

pdf 파일의 메모리 그대로 담아주면 된다는데… 이게 무슨 말인지를 모르겠습니다…

어떤 부분을 검색해주면 좋을지 알려주시면 감사하겠습니다

2개의 좋아요

BASE64를 살펴보시겠어요?

2개의 좋아요

감사합니다!! 찾아볼게요

2개의 좋아요

하나 더 질문이 있는데요, 알려주신대로 base64 로 인코딩 할 경우와 원래 pdf 파일의 사이즈가 다른데요, 원래 이런걸까요!? 예를 들어 pdf 파일의 사이즈가 70kbytes 이고, 이 pdf 파일을 base64 로 인코딩할 경우 100kbytes 가 되거든요. 파일 사이즈가 다른데 이대로 base64 로 인코딩 된 문자열을 전문으로 만들어도 괜찮을까요?

2개의 좋아요

일반적으로 바이너리 파일을 Base64로 변환하면 파일 크기가 증가합니다.

이는 Base64 인코딩 방식이 8비트 바이너리 데이터를 6비트 문자로 변환하기 때문입니다. 이로 인해 데이터의 약 33% 증가가 발생합니다.

즉, 예를 들어 1MB의 바이너리 파일을 Base64로 인코딩하면, 대략 1.33MB 크기의 텍스트 파일이 생성됩니다.

하지만 이 방법은 바이너리 데이터를 텍스트 형식으로 변환하여 전송이나 저장에 용이하게 할 수 있는 장점이 있습니다. 또한 Base64는 ASCII 문자로만 이루어져 있어서 문자열로 전송될 수 있는 환경에서는 유용합니다.

by chatgpt 3.5

5개의 좋아요

답변 감사합니다!!

2개의 좋아요

파일을 base64로 변환할 때 한 가지 더 주의하실 점이 있습니다.

흔히 base64 문자열을 변환하기 위해 메모리에 모든 파일 내용을 MemoryStream으로 로드하고, 변환된 BASE64 string 역시 모두 메모리에 StringBuilder로 로드하도록 간단하게 코드를 작성하는 일이 많습니다. 파일 크기가 작다면 괜찮지만, 나중에 대용량 파일을 다룰 여지가 있다면 이렇게 코딩하는 것은 문제가 있습니다. (혹은 한 번에 많은 수의 파일을 업로드하려고 할 때에도 메모리 누수, 정확히는 가비지 컬렉터가 돌아가기 전까지는 메모리 회수가 안되어서 메모리 부족 현상이 발생할 수 있습니다.)

string - Encode a FileStream to base64 with c# - Stack Overflow 의 내용을 참고하셔서, 메모리에 모든 파일을 불러오거나 BASE64 변환 결과를 버퍼링하지 마시고, 임시 파일에 BASE64 변환 결과를 저장하고 나중에 파일 포인터만 처음으로 당겨 서버로 전송하도록 세심하게 코드를 만드는 것이 좀 더 안정적인 애플리케이션 구현 방식이니 참고하시면 좋겠습니다.

7개의 좋아요

오왓…좋은 정보 감사합니다

2개의 좋아요