POST api вызов для загрузки изображения на angular 8 - PullRequest
1 голос
/ 20 марта 2020

У меня есть вызов API POST-запроса, чтобы добавить сообщение с заголовком, текстом и несколькими изображениями в следующем формате:

{
   "title" : "post title",
   "text" : "post text",
   "fileName" : ["S3-file-image1.png", "S3-file-image2.png", "S3-file-image3.png"...]
}

Итак, я создал форму для добавления заголовка, текста и выбора нескольких файл изображения. Теперь в html я могу напрямую связать данные формы для заголовка и текста, но для изображения, сначала я загружаю выбранные изображения в корзину S3 и извлекаю местоположение файла изображения S3. Вот код, который я использовал для загрузки изображения

     postData = {
          "title" : "post title",
          "text" : "post text"
     };

     postData.fileName = [];       // Here i am creating fileName array with empty

     const bucket = new S3(
        {
            accessKeyId: 'my-access-key-id',
            secretAccessKey: 'secret-access-key',
            region: 'ap-region'
        }
      );

      const params = {
        Bucket: 'Bucket-Name',
        Key: fileName,
        Body: file,
        ACL: 'public-read',
        ContentType: fileType,
        ServerSideEncryption: 'AES256'
      };

      bucket.upload(params).on('httpUploadProgress', (evt) => {
        console.log(evt.loaded + ' of ' + evt.total + ' Bytes');
      }).send(
        (err, data) => {
          if (err) {
            console.log('There was an error uploading your file: ', err);
            return false;
          }
          console.log('Successfully uploaded file.', data);
          postData.fileName.push(btoa(data.Location));       // Here I am pushing uploaded file location to postData.
        }
      );

      consol.log(postData.fileName);       // It gives empty array with 'i' (Value below was evaluated just now) on next to array. On tapping arrow of that empty array gives the result I required.

      const body = JSON.stringify(postData);

      return this.http.post<any>(this.url + groupId + '/post/add', body, {headers: headersType});

Из-за того, что при отправке запроса имя местоположения выталкивается в пустой массив, в качестве ответа он принимает только пустой массив. Как я могу получить местоположение загруженного изображения на postData

...