멀티 파트 필드 / 파일 데이터를 개별적으로 구문 분석하는 방법은 무엇입니까?


9

수신 필드를 잡고 파일 업로드를 처리하기 위해 한 번으로 여러 부분으로 된 양식을 구문 분석하고 싶습니다.

Node 앱 내에서 우려를 적절히 분리하려고합니다.

  • 컨트롤러는 들어오는 필드를 처리합니다.
  • 모델은 업로드 파일 논리를 담당합니다.

새 인스턴스를 만들려면 필드 데이터를 모델로 전달해야하므로 파일 업로드를 시작 하기 전에 필드 데이터를 사용할 수 있어야 합니다.

현재 모든 form.parse()또는 동등한 함수는 필드와 파일을 함께 구문 분석합니다 . 예 : req.pipe(busboy)파일과 필드를 모두 처리합니다.

node-multiparty, formidable, busboy, multer와 같은 모듈을 확인했습니다. 아무도 이것에 대한 해결책이없는 것 같습니다.

내가 달성하고자하는 예는 다음과 같습니다 : https : //.com

이것도 가능합니까?


2
잠깐만 ... 그래서 모델이 논리와 제어를 담당하게 하시겠습니까?
Matthew Mark Miller

일반적으로 아키텍처는 문제를 혼합하기에 좋지 않습니다. 이것은 2 년 전 이므로이 질문을 할 때 어떤 문제를 해결했는지 정확히 기억하지 못하지만 저장 논리를 Mongoose 스키마 객체의 일부로 원한다는 것을 기억합니다. 모델에 몽구스 방법을 사용하면 앱의 어느 곳에서나 쉽게 저장할 수 있습니다. 되돌아 보면, save 메소드가 모델 메소드가되기에 충분히 일반적이라고 생각하지 않습니다. 아마도 별도의 서비스 메소드로 유지해야합니다. mongoosejs.com/docs/guide.html
Scott

1
lol 나는 이것이 얼마나 오래되었는지 알지 못했다. 그리고 그래, 객체가 2 차원으로 데이터를 전송할 때 지속성 작업을 특별히 유지되는 데이터와 별도로 유지하는 것이 옳다고 생각합니다. 컨트롤러 외부에 물건을 쉽게 고정하고 유지할 수 있습니다.
Matthew Mark Miller

@Scott "이 질문을 할 때 어떤 문제가 해결되었는지 정확히 기억하지 못합니다." -그러면 전혀 대답하지 않을 것이므로이 질문을 삭제하는 것이 좋습니다.
Timothy Truckle

답변:


1

이 질문에 대답하고 싶습니다 :

내용 전에 멀티 파트 필드 헤더를 읽을 수 있습니까?

내가 볼 때 다중 RFC ,이 예제를 참조하십시오 :

From:  Nathaniel Borenstein <nsb@bellcore.com> 
To: Ned Freed <ned@innosoft.com> 
Subject: Formatted text mail 
MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=boundary42 


--boundary42 
Content-Type: text/plain; charset=us-ascii 

...plain text version of message goes here.... 

--boundary42 
Content-Type: text/richtext 

.... richtext version of same message goes here ... 
--boundary42 
Content-Type: text/x-whatever 

.... fanciest formatted version of same  message  goes  here 
... 
--boundary42-- 

헤더와 같은 헤더 Content-Type는 본문 부분 사이에 있습니다. 따라서 모든 본문 앞에 모든 헤더를 사용할 수는 없습니다.

이제 귀하의 질문에 :

수신 필드를 잡고 파일 업로드를 처리하기 위해 한 번으로 여러 부분으로 된 양식을 구문 분석하고 싶습니다.

"구문 분석"의 의미에 따라 다릅니다. HTTP 메시지를 읽을 때 끝날 때를 알 때 몇 가지 구문 분석이 필요합니다. 끝 부분에는 추가 항목이 있습니다 --.

--boundary42--

두 번 파싱에 대한 아이디어 :

  • 결론은 소켓에서 전체 답변을 복사하고 나중에 구문 분석을 수행 할 수 있어야한다는 결론입니다.
  • 파일 본문 앞의 파일 헤더를 읽을 수 있지만 모든 파일의 모든 헤더를 읽을 수는 없습니다.

이것도 가능합니까?

예, 가능한 경우가 있습니다 (파일이 마지막으로 업로드 된 경우). 나는 당신이 무엇을하고 싶은지 정확히 알지 못하기 때문에 당신이 필요한 것을 보편적으로 가능한지 알 수 없습니다.

이것이 명확하게되기를 바랍니다. 답변이 완전하지 않거나 마음에 들지 않으면 다른 사람이 질문에 답변하려고하는 사람들에게 귀중한 피드백이 될 수있는 이유를 알려주십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.