2016-08-25 3 views
0

내 서버에 이미지를 제출하려고합니다.몽구스를 사용하여 Node.js 서버에 여러 이미지 업로드

Objective-C 부분에서 "name"과 "filename"이있는 "form-data"를 사용하여 HTTP 본문에 이미지 데이터를 추가합니다. 아래는 관련 스 니펫입니다. 나는 다른 부분들이 정확해야한다고 확신한다. 필요한 "내용 - 처리"만약에 라인에 초점을하시기 바랍니다 :

... 
// Append image data to body data 
NSMutableData *bodyData = [NSMutableData data]; 
int i = 1; 
for (NSData *imgData in allImgData) { 
    [bodyData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [bodyData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"photoToUpload[]\"; filename=\"%@%d.png\"\r\n", fileParamConstant, i] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [bodyData appendData:[@"Content-Type: image/png\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [bodyData appendData:imgData]; 
    [bodyData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    i++; 
} 
// Append one last boundary 
[bodyData appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]]; 
// setting the body of the post to the reqeust 
[urlRequest setHTTPBody:bodyData]; 
... 

문제를

그러나, 온라인으로 여러 게시물을 검색 한 후, 나는 아직도 내가 을 처리하는 방법을 이렇게 확실하지 않다 mongoose을 사용하는 nodejs와 서버 파트. 내 Objective-C 부분을 기반으로 "req.body"또는 "req.files"에서 이미지를 얻어야합니까? 그래서 내 문제는 HTTP 요청을 이해 거짓말, 특히 위의 "내용 - 처분"부분과 관련이 있다고 생각합니다.

다음은 내 현재 nodejs 코드 :

// on routes that end in /users/competitorAnalysisPhotoData 
// ---------------------------------------------------- 
router.route('/users/competitorAnalysisPhotoData/:userName') 

// update the user info (accessed at PUT http://localhost:8080/api/users/competitorAnalysisPhotoData) 
    .put(function(req, res) { 

     // use our user model to find the user we want 
     User.findOne({ userName: req.params.userName}, function(err, user) { 

      if (err) 
       res.send(err); 
      console.log('Got the user in "Put"!'); 

      // update the photos -- Version 1 
      user.competitorAnalysis.push({ 
       photo1: req.body.photo1, 
       photo2: req.body.photo2, 
       photo3: req.body.photo3, 
       photo4: req.body.photo4 
      }); 
      console.log('req.body.photo1: %s', req.body.photo1); 
      console.log('Save the photo data for competitorAnalysisPhotoData!'); 

      // update the photos -- Version 2 
      user.competitorAnalysis.photo1.data = fs.readFileSync(req.files.photo1.path) 
      user.competitorAnalysis.photo1.contentType = 'image/png'; 
      user.competitorAnalysis.photo2.data = fs.readFileSync(req.files.photo2.path) 
      user.competitorAnalysis.photo2.contentType = 'image/png'; 
      user.competitorAnalysis.photo3.data = fs.readFileSync(req.files.photo3.path) 
      user.competitorAnalysis.photo3.contentType = 'image/png'; 
      user.competitorAnalysis.photo4.data = fs.readFileSync(req.files.photo4.path) 
      user.competitorAnalysis.photo4.contentType = 'image/png'; 
      console.log('req.files.photo1.path: %s', req.files.photo1.path); 
      console.log('Save the photo data for competitorAnalysisPhotoData!'); 

      // save the user 
      user.save(function(err) { 
       if (err) 
        res.send(err); 
       res.json({ message: 'User updated!' }); 
      }); 

     }); 

내가 제대로 서버 측 처리하는 방법에 대한 몇 가지 제안을 얻을 수 있다면 그것은 좋은 것입니다.

답변

1

GridFS 또는 로컬 파일 시스템을 사용하여 파일을 저장 한 다음 해당 파일에 대한 참조를 몽구스 모델에 저장하십시오. 이미지/파일이 안전한 크기 (모델의 나머지 부분보다 16MB 이하 임)이면 모델에 Blob (ByteArray)로 저장할 수 있습니다.

관련 문제