큰 CSV 파일을 생성하고 이메일 메시지의 첨부 파일로 전송하는 Rails 앱에서 백그라운드 작업을하고 있습니다. 전자 메일의 크기를 관리하기 위해 첨부하기 전에 CSV를 압축하고 있습니다. 이것은 잘 작동합니다. Letter Opener가 개발 중이며 압축 된 첨부 파일을 열고 데이터를 읽을 수 있습니다. 나는 지퍼를하기 위해 "루비 지프"보석을 사용하고 있습니다.바이너리 이메일 첨부 파일의 압축을 풉니 다
트릭이이를 테스트하는 것 같습니다. rspec을 사용하여 메시지에 첨부 파일이 있고 첨부 파일 유형이 모두 application/x-zip-encoded
인 것을 확인할 수 있습니다. 제가하고 싶은 것은 첨부 파일의 압축을 풀고 테스트 내에서 데이터의 유효성을 검사하는 것입니다. 첨부 파일은 Mail :: Part 형식의 개체입니다. 첨부 파일 part
을 호출하면 part.body.raw_source
, part.body.encoded
또는 part.decode_body
을 사용하여 데이터를 가져올 수 있습니다. (첫 번째와 세 번째는 동일합니다.) part.body.encoding
은 시체가 이진이라는 것을 알려줍니다. Zip :: InputStream 객체 (Zip::InputStream.open(part.body.raw_source)
또는 다른 데이터 메소드를 사용하여)에 데이터를 공급하려고하면 ArgumentError: string contains null byte
과 같은 것을 얻습니다.
이 첨부 파일을 열고 rspec에서 데이터를 읽을 수있는 방법은 무엇입니까? 거기에 어딘가에서해야 할 디코딩 단계가 있습니다.
오류 look a lot like this question이지만 거기에는 답변이 없습니다.
나는 오해가있을 수 있지만 보석이해야 할 일을하고 있는지 확인하고자하는 것 같습니다. 이 경우, 그렇게해서는 안됩니다. 다른 사람의 도서관을 다루기위한 시험을 치르면 안됩니다. 그들은 자신의 테스트를 가지고 있어야하며 그렇지 않은 경우 프로젝트에 테스트를 제공하거나 제대로 테스트 된 라이브러리를 찾을 수 있습니다. –
그 것처럼 보입니다. 그렇지 않습니다. 내 목표는 이메일에 첨부 된 데이터가 첨부되어야한다고 확인하는 것이 더 중요하다고 생각합니다. 그렇게하는 방법은 데이터의 압축을 풀고 검사하는 것입니다. 압축 풀기 단계에 걸렸어. – pjmorse