0

I have an angular application and express server a middle ware which call the external API

    $scope.uploadLayout = function(){
    $scope.selectedTemplate.selected = $scope.items;
    var fd = new FormData()
    fd.append('name', $scope.template.name)
    fd.append('description', $scope.template.desc)
    fd.append('file', $scope.template.file)
    $http.post('/layout/template',fd,{
        transformRequest: angular.identity,
        headers: { 'Content-Type': undefined}
    }).then(function(response){
        getLayoutRules()
        console.log("file uploaded successfully")
    })//add error callback
    console.log('test')
}

The main problem occurs when express sends the data to the external API

  app.post('/layout/template', upload.any(), (req, res) => {
  // console.log(req.body.name);
  var formdata = new Buffer(req.files)
  var form = new FormData();
  form.append('name', req.body.name)
  form.append('description', req.body.description)
  form.append('file', formdata)
  console.log(form)
  var contentLength = req.files.length;
  var url = `${apiUrl}/layout/template`
  // var r = request.post(url,{
  //     headers: { 'Content-Type': undefined}
  // }, function optionalCallback(err, httpResponse, body) {
  //     if (err) {
  //         return console.error('upload failed:', err);
  //       }
  //       console.log('Upload successful!  Server responded with:', body);
  // })
  request({
    headers: {
      'Content-Length': contentLength,
      'Content-Type': 'multipart/form-data'
    },
    url:url,
    method:'POST',
    body: form
  },function(err,body,res){
    console.log(err)
    console.log(body)
  })

});

I have checked the form is generating properly but the external API server gives me an error saying that

"The request was rejected because no multipart boundary was found"

Kindly help, or is there any other way round it

UPDATE

I modified the code a bit to send the request headers fetched from the browser

app.post('/layout/template', upload.any(), (req, res) => {
  var header = req.headers['content-type']
  var formdata = new Buffer(req.files)
  console.log(formdata)
  var fd = new FormData();
  fd.append('name', req.body.name)
  fd.append('description', req.body.description)
  fd.append('file', formdata)
  //var contentLength = req.files.length;
  //console.log(contentLength)
  var url = `${apiUrl}/layout/template`
  //console.log(fd)
  // var r = request.post(url,{
  //     headers: { 'Content-Type': undefined}
  // }, function optionalCallback(err, httpResponse, body) {
  //     if (err) {
  //         return console.error('upload failed:', err);
  //       }
  //       console.log('Upload successful!  Server responded with:', body);
  // })
  request({
    headers: {
      'Content-Type': header
    },
    url:url,
    method:'POST',
    body: fd
  },function(err,body,res){
    //console.log(body)
    console.log(res)
  })
  //console.log(request)

});

So now i am sending the same boundary set by browser but now the form parameters are not detected by java server

ashu gupta
  • 41
  • 7
  • Same error, different stack: https://stackoverflow.com/questions/17462642/spring-rest-the-request-was-rejected-because-no-multipart-boundary-was-found – Cisco Jul 09 '17 at 15:36
  • Instead of `body: fd`, use `formData: fd`. See [form-data - Integration with other libraries](https://www.npmjs.com/package/form-data#integration-with-other-libraries) and [request - multipart/form-data (Multipart Form Uploads)](https://github.com/request/request#multipartform-data-multipart-form-uploads). – georgeawg Jul 09 '17 at 19:04
  • tried that as well , no luck – ashu gupta Jul 09 '17 at 19:34

0 Answers0