[Rails] null byte 오류 발생 시 대응
하고 싶은 일
① S3에서 여러 Zip 파일 가져오기
② 여러 zip 파일을 디렉토리로 동결해제
③ 최종적으로 zip 파일을 만들고 싶다.
발생한 문제
①get으로Object를 통과한 결과 ②에서 필요한 파일 경로를 얻을 수 없는 상황은 다음과 같다.
PK\u0003\u0004\u0014\u0000\u0000\u0000\u0000\u0000\xA1\x9AYQ\u0000\u0000\u0000
client = Aws::S3::Client.new(
:region => 'ap-northeast-1',
:access_key_id => '***',
:secret_access_key => '***',
)
@orders.each do |order|
obj = client.get_object(
bucket: "*",
key: order.zip_file_name
).body.read
Rails.logger.debug obj.inspect
#=> PK\u0003\u0004\u0014\u0000\u00....
end
까닭
zip 파일의 내용은 이진 데이터입니다.
다운로드한 파일의 내용을 obj를 참조합니다.함수
.body.read
는 zip 파일의 내용을 참고하는 함수입니다.따라서 당연히 로그에 이진법이 나온다.해결책
read를 사용하지 않고 루비zip
open_buffer
방법으로 zip 파일을 엽니다.다만, 오픈rubyzip의 공식 문서에 버퍼 방법이 없습니다...
나는 더 좋은 방법을 찾고 싶다.
client = Aws::S3::Client.new(
:region => 'ap-northeast-1',
:access_key_id => '***',
:secret_access_key => '***',
)
@orders.each do |order|
obj = client.get_object(
bucket: "*",
key: order.zip_file_name
).body >> readしない!
end
# get_objectでopenする
Zip::File.open_buffer(obj) do |zip|
~~
end
Reference
이 문제에 관하여([Rails] null byte 오류 발생 시 대응), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/taizo_pro/articles/92d3c934bfcd0c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)