Dealing with Binary Files

sdg's blog·2024년 6월 24일
  1. Content-Disposition
    클라이언트에 파일 처리에 대한 디렉션 제공하는 header
    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition

  2. x-www-form-urlencoded vs Multipart/form-data
    https://velog.io/@ksmfou98/HTTP-%ED%8F%BC%EA%B3%BC-%ED%8C%8C%EC%9D%BC-%EC%A0%84%EC%86%A1-x-www-form-urlencoded-Multipartform-data

curl -X POST https://example.com/api \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "key1=value1&key2=value2"
     
curl -X POST https://example.com/api \
     -H "Content-Type: multipart/form-data" \
     -F "key1=value1" \
     -F "file1=@path/to/file"
  1. Why do we use Binary File?
    https://m.blog.naver.com/tipsware/221353023593

  2. MIME types (Content-Type) & application/octet-stream
    일반적인 경우 MIME types 존재, 파일 메타데이터에서 추출하거나, S3, Blob 등 스토리지 시스템 api로 추출가능. 대응되는 MIME Type 없거나 특정하고싶지 않은 경우 application/octet-stream 사용.
    https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

  3. api response로 파일을 보내는 법

  • WebSocket for Real-time Transfer
  • Returning a Signed URL (for Cloud Storage)
  • Using a Base64 Encoded String
  • Streaming the File
  • Direct File Transfer via HTTP Response (WebServer)
  1. how Based64 Encoded Strings are viewed in HTML
    <embed src="data:application/pdf;base64,JVBERi0xLjcKCjQgMCBvYmoKPDwvTGluZWFyaXplZCAxL0wgMzI3ODgvTyAxNi9FIDE2NTgvTiAyL1QgMzA3MjQvSCBbIDM3OCAyM10vSCBbIDExODkgMzI5XS9JMiAxMDAgMDAwMDAwMDAgMDAwMDAgMCBuI+Etc3dhZ2dlci4x...<rest_of_base64_string>" width="600" height="400" type="application/pdf">
  1. Http Content Headers
    https://gmlwjd9405.github.io/2019/01/28/http-header-types.html

  2. Apache POI(xsl), OpenCSV(csv)

  3. utf-bom, utf
    https://mkyong.com/java/java-how-to-add-and-remove-bom-from-utf-8-file/

*. 기타

  • 파일(바이너리)을 다룰 때는 타입을 엄격히 통제해야한다. 그렇지 않으면 일부 브라우저에서는 인식하지 못하는 파일도 수집이 되기 때문이다.
  • 파일을 제공하는 방식은 S3, Blob등에 파일을 위치시키고 파일 저장소 url 또는 cdn url 을 제공하거나 (linux server에 두고 nginx 경로를 설정하는 방법도 있다.), 아니면 byte array를 base64 인코딩하여 제공하는 방식이 있다. prviate하게 처리해야할 파일의 경우 인코딩된 파일을 mime type과 함께 client에 제공하는 것이 좋다. 만약 cloud url를 활용할 경우 signed url 방식을 사용한다.

0개의 댓글