Попытка использовать ax ios .put, но не может указать параметр файла для работы с локальным путем. - PullRequest
0 голосов
/ 03 апреля 2020

Привет. Я пытаюсь загрузить изображение, снятое на моем телефоне, на мою AWS S3 учетную запись. Едва ли это новая концепция, я понимаю, но я новичок в JS и реагирующе-родной.

Я добился успеха с подобным кодом, когда файл изображения выходит из компонента Input в веб-приложении, но как мне использовать этот код с локальным путем?

Ниже я попытаюсь использовать fs.readfile с локальным путем, однако загрузка все равно не удалась.

  1. это правильный способ сделать это?
  2. я неправильно использую readfile?

Заранее спасибо, если можете помочь!

извлечение кода:

uploadFile = (filepath,signedS3request) => {

        return new Promise((resolve,reject) => {

            let fileParts = filepath.split('.');
            let fileType = fileParts[1];

            var options = {
                headers: {'Content-Type': fileType}
            }
            fs.readFile(filepath)
            .then(imageFile => {
                axios.put(signedS3request,imageFile,options)
                .then(result => {
                    console.log('fileupload success:',result);
                    resolve('success')
                })
                .catch(error => {
                    console.log('fileupload failed:',error);
                    reject('failed file upload')
                })

            }).catch(error => {
                console.log('fileupload : cannot read file : ', filepath);
                reject('failed to read file for upload')
            })

        })
    }

1 Ответ

0 голосов
/ 03 апреля 2020

Вы можете использовать данные формы и для этого.

проверить пример.

const concat = require("concat-stream")
const FormData = require('form-data');
const fs = require('fs');
uploadFile = (filepath,signedS3request) => {    
    return new Promise((resolve,reject) => {

        const fd = new FormData();

        fd.append("foo", "bar")
        fd.append("file", fs.createReadStream(filepath))

        fd.pipe(concat({encoding: 'buffer'}, data => {
          axios.put(signedS3request, data, {
            headers: fd.getHeaders()
          }).then(result => {
                console.log('fileupload success:',result);
                resolve('success')
            })
            .catch(error => {
                console.log('fileupload failed:',error);
                reject('failed file upload')
            })
        }))
    }
}
...