2014-09-06 2 views
0

문서 삽입 REST API (POST/v1/documents)에는 content-type에 multipart/mixed가 필요합니다. 모든 온라인 예제는 multipart/form-data 사용법을 보여줍니다. 내 연구를 기반으로 multipart/mixed가 multipart/form-data에 포함되어야한다는 것을 배웠습니다. 누군가 실마리를 얻을 수있는 예나 리소스를 가르쳐 주시겠습니까? 고맙습니다!multipart/form-data를 multipart/mixed로 변환하는 방법

은 참고하시기 바랍니다 : 나는 백엔드에서 프런트 엔드와 Node.js를에 AngularJS와를 사용하고

각도 코드 :

  $http({ 
       url: '/new', 
       method: 'POST', 
       headers: { 
        'Content-Type': undefined 
       }, 
       transformRequest: function(data, getHeaders) { 
        var form = new FormData(); 
        form.append('bug', angular.toJson(bug)); 
        for (var i = 0; i < data.files.length; i++) { 
         console.log('FORM',data.files[i]); 
         form.append('file' + i, data.files[i]); 
        } 
        return form; 
       }, 
       data: { 
        bug: bug, 
        files: $scope.files 
       } 
      }).success(function(data, status, headers, config) { 
       Flash.addAlert('success', 'successssss'); 
      }).error(function(data, status, headers, config) { 
       Flash.addAlert('danger', 'failed'); 
      }); 

노드 코드 : : request 주 :이 코드는 확실히 mulitpart/mixed 대신에 json으로 데이터를 가져 오기 때문에 잘못되었습니다. 그러므로 질문은

.... 
....  
case 'POST': 
      console.log('its a POST'); 
      var url = 'http://api-server.com:8003/v1/documents?extension=json'; 
      var options = { 
       method: 'POST', 
       headers: req.headers, 
       url: url, 
       body: JSON.parse(req.body.bug), 
       json: true 
      }; 

      req.pipe(request(options, function(error, response, body) { 
       if (error) { 
        next(error); 
       } 
      })).pipe(res); 
여기

는 REST 엔드 포인트에 요청을 보내기 전에 내가 다른 multipart/* 콘텐츠 형식의 차이는 단지 의미, 그래서 그냥 req.headersContent-Type을 수정되어 현재

------WebKitFormBoundaryJlYMd1KVllv1WgDS 
Content-Disposition: form-data; name="bug" 

{"relatedTo":[],"tickets":[],"id":1,"kind":"Other","createdAt":"2014-09-06T08:33:43.614Z","modifiedAt":"2014-09-06T08:33:43.614Z","status":"Verify","title":"Quae inventore beatae tempora mollit deserunt voluptatum odit adipisci consequat Est dolore quia perspiciatis","submittedBy":{"name":"Sudhakar Reddy","email":"[email protected]","username":"sreddy"},"assignTo":{"name":"Guzman Wagner","email":"[email protected]","username":"small"},"description":"sdsdsdsds","category":"MLOS","tofixin":"Help-1.1","severity":"Performance","priority":{"level":"4","title":"Important"},"relation":"Test Specification task for","clones":[],"version":"6.0-3","platform":"EC2","memory":"Reprehenderit quia aut voluptatem in ex dolore eu numquam eum et esse officia id consequatur Est","processors":"Reiciendis nostrum adipisicing occaecat inventore veniam excepturi","note":"Officiis qui adipisci commodo eveniet, esse aperiam est non unde possimus, sed nesciunt, exercitation eius magna consequat. Sint ipsa, laboriosam.","changeHistory":[],"subscribers":[{"name":"Sudhakar Reddy","email":"[email protected]","username":"sreddy"},{"name":"Guzman Wagner","email":"[email protected]","username":"small"}],"attachments":[{"webkitRelativePath":"","lastModifiedDate":"2014-07-18T23:53:29.000Z","name":"jamesbond.jpg","type":"image/jpeg","size":858159}]} 
------WebKitFormBoundaryJlYMd1KVllv1WgDS 
Content-Disposition: form-data; name="file0"; filename="jamesbond.jpg" 
Content-Type: image/jpeg 


------WebKitFormBoundaryJlYMd1KVllv1WgDS-- 

답변

0

얻을 것을 다중/폼 데이터의 :

var url = 'http://api-server.com:8003/v1/documents?extension=json'; 

// if you use `req.headers` elsewhere, you may want to make a copy of the 
// headers object so as not to mutate the original headers ... 
req.headers['content-type'] = req.headers['content-type'] 
           .replace('multipart/form-data', 
              'multipart/mixed'); 

var options = { 
    method: 'POST', 
    headers: req.headers, 
    url: url, 
    body: JSON.parse(req.body.bug), 
    json: true 
}; 

req.pipe(request(options, function(error, response, body) { 
    if (error) { 
     next(error); 
    } 
})).pipe(res); 
+0

솔루션을 사용한 후 요청이 제출되지 않습니다. 크롬 디버거의 헤더는 '주의 : 임시 헤더가 표시됨'을 보여줍니다. – Sudhakar

+1

각 부분의 내용 처리 헤더를 어떻게 설정합니까? 예 : 다음과 같은 내용이 필요합니다 :'Content-Disposition : attachment; filename = "doc2.json"'그러나 현재이 변경 방법을 모르겠습니다. – Sudhakar

관련 문제