Ошибка записи после завершения при чтении файла с помощью FS - PullRequest
0 голосов
/ 04 марта 2020

Я создал программу, в которой пользователь может отправить запрос с URL-адресом в формате PDF, затем загрузить его и переслать во внешнюю конечную точку API. Теперь код может загружать файл, но он сталкивается с этой ошибкой, когда начинает читать файл.

Я должен признать, что Promises - это то, что я ненавижу изучать, поэтому я использовал функцию Asyn c с Awaits и в В других случаях я использовал нормальные функции. Обещания так трудно гр asp. Синтаксис затрудняет чтение.

Код ниже:

const fs = require('fs');
const url = require("url");
const path = require("path");
const http = require('http')
const rp = require('request-promise');
const app = express();
const port = 8999;


app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post('/upload-invoice', (req, res) => {
  
  var parsed = url.parse(req.body.FileURL);
  var filename = (path.basename(parsed.pathname));
  var downloaded_file_path = `invoices/${filename}`;
  
  function download() {
    
    var options = {
      hostname: parsed.hostname,
      port: 2799,
      path: parsed.path,
      method: 'GET'
    }
    
    const file = fs.createWriteStream(`invoices/${filename}`);
    
    const make_request = http.request(options, (response) => {
      response.pipe(file);
    });
    
    make_request.end();
    
    try {
      setTimeout(function () {
        upload()
      }, 1000);
    } catch (error) {
      console.log('An Error occured when uploading file,'+error);
    }
    
  }
  
  async function upload() {
    
    const flow = "Upload Invoice"
    var file_stream = fs.createReadStream(downloaded_file_path)
    
    var options = {
      method: 'POST',
      strictSSL: true,
      uri: 'https://endpoint.goes.here',
      formData: {
        'file': file_stream
      },
      headers: {
        'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryzte28ISYHOkrmyQT'
      },
      json: req.body,
      resolveWithFullResponse: true
    }
    
    try {
      var response = await rp(options)
      res.send(response.body)
    }
    catch (error) {
      console.log(`An error on ${flow} flow for unknown user. Here is more info about error,
        ${error}
        `)
        res.send("Error")
      }
    }
    
    download()
  });
  
  app.listen(port)

Обновление:

      formData: {
        name: filename,
        file: {
          value: fs.createReadStream(downloaded_file_path),
          options: {
            filename: filename,
            contentType: 'application/pdf'
          }
        }
      }

Я тоже пробовал этот код, но он выдает ту же ошибку.

1 Ответ

0 голосов
/ 07 марта 2020

Работает после удаления json: req.body

Моя вина.

...