Nodejs, Express, Mongoose 서버에서 파일 저장 및 클라이언트 다운로...

Nodejs, Express, Mongoose 서버에서 파일 저장 및 클라이언트 다운로...

작성일 2018.03.23댓글 1건
    게시물 수정 , 삭제는 로그인 필요

안녕하세요

multer를 이용하여

특정 파일을 서버로 업로드하고

그 binary 데이터를 mongoose의 Buffer 스키마타입으로 저장한 후에

클라이언트가 요청시 그걸 다시 다운로드 할 수 있는 기능을 만들고 있는데요

res.setHeader('Content-disposition', 'attachment; filename=' + legacy.file.originalName);
res.setHeader('Content-type', legacy.file.mimetype);
res.send(legacy.file.data);

위 코드는 데이터베이스에 저장되어 있는 데이터를 불러온 후 응답하는 코드입니다.

legacy.file에는 데이터베이스에서 불러온 Binary 데이터가 있구요

저렇게 코드를 작성하면

.js파일이나 주로 쓰는 파일은 브라우저 단에서 다운로드가 잘 되는데요

몇가지 파일들은 그냥 응답 지연됩니다. (오류가 아닌..)

혹시 왜그런지 이유를 아시는분 설명 부탁드립니다.

어차피 데이터베이스에 저장된 값은 모든 파일이 바이너리로 저장될텐데

왜 파일 포맷에 따라 어떤 건 되고 어떤건 안될까요

브라우저에서 결정하는 부분일까요?(그래서 컨텐츠 타입을 어느 파일이든지 하나로 고정해보기도 했습니다.)

아니면 첫번째 헤더 셋팅시에 파일 이름에 있는 확장자를 보고 결정되는 걸까요?

아무튼

Mongoose를 이용해 Buffer 타입으로 값을 저장후 이것을 다시 다운로드하는 형태로 제공하려면

어떻게 할까요?




#nodejs express 예제 #nodejs express 설치 #nodejs express example #nodejs express router #nodejs express typescript #nodejs express html #nodejs express session #nodejs express 배포 #nodejs express mysql #nodejs express generator

profile_image 익명 작성일 -

위 내용 만으로 오류를 특징하긴 어려울 것 같습니다.

오류의 범위를 줄이는게 원인을 찾는데 도움이 될 것 같은데

1. mimetype 이 원인인지 확인
보여주신 부분을 볼때 upload 과정에서 mongoDB에 mimetype 을 저장하는 것으로 보이는데
특정한 파일의 mimetype이 DB에 잘못들어가는게 아닌지 확인이 필요합니다.

2. binary size
download 과정을 알 수 없어 유추해본건데
파일 크기가 너무커 DB에 저장된 binary를 node.js가 memory에 올리지 못하는 경우가 있을 수 있습니다.


즉 해당 증상이 파일의 크기 문제일 수도 type이 문제일 수도 있습니다.


의심가는게 특정 브라우저라면 동일한 파일을 동일한 PC에서 브라우저를 변경해 가며 테스트했을 때
특정 브라우저에서만 오류가 발생한다라고 하면 가능하겠지만

현재 증상만으로 확정하기에는 test case가 부족해 보입니다.


그리고 추가로 node.js 앞에 reverse proxy 구성이 되어있다면
proxy 구성으로 인해 timeout이 발생하는게 아닌지도 검토할 필요가 있습니다.

Mongoose 서버에서 파일 저장 및...

... 특정 파일서버로 업로드하고 그 binary 데이터를 mongoose의 Buffer 스키마타입으로 저장한 후에 클라이언트가 요청시 그걸 다시 다운로드 할 수 있는 기능을...

node.js 이미지업로드 질문

... 확인:** Express에서 `Content-Type`이 `multipart/form-data`로 설정되어 있는지 확인합니다. 5. **파일 크기 제한 확인:** multer 또는 서버가...

Nodejs 가 프론트엔드 인지 백엔지 궁금

... 코드가 클라이언트쪽에서 실행되는건 프론트엔드, 서버에서 실행되는건 백엔드입니다. express서버에서 실행되는 백엔드이고 거기서 파일이나 기타 형태로...

텍스트 에디터 넣는 방법? (NODE.js)

... MySQL에 저장하기 위해서는 다음과 같은 단계를 따르면 됩니다: - Node.js에서 MySQL 데이터베이스와 연결하는... - 서버에서 가져온 데이터를 클라이언트에 전송하여...

node.js chatgpt질문....

... // JavaScript 파일의 MIME 타입 설정 app.use('/js', express.static(__dirname + '/js... 이미지 파일을 스트리밍하여 클라이언트에게...

node.js mysql2 세션 질문

... 파일의 MIME 타입 설정 app.use('/js', express.... "); } }); } } } } catch (err) { // 서버에서 예상치... id라는 것은 '해당 클라이언트의 세션을...