Как отправить изображение в виде файла внутри тела сообщения http - PullRequest
0 голосов
/ 15 марта 2020

Мне нужно отправить изображение на мой сервер в виде файла, но я не могу понять, как это сделать. Я использую плагин nativescript-camera-plus и nativescript-background-http для отправки запроса. Это код.

                          onTakePictureTap() {
    requestPermissions().then(
        () => {
            takePicture({ width: this.width, height: this.height, keepAspectRatio: this.keepAspectRatio, saveToGallery: this.saveToGallery, allowsEditing: this.allowsEditing })
                .then((imageAsset: any) => {
                    this.cameraImage = imageAsset;
                    let that = this;
                    imageAsset.getImageAsync(function (nativeImage, ex) {
                        if (ex instanceof Error) {
                            throw ex;
                        } else if (typeof ex === "string") {
                            throw new Error(ex);
                        }

                        let imgPhoto = new ImageSource();

                        imgPhoto.fromAsset(imageAsset).then((imgSrc) => {

Здесь я установил nativescript-background-http

                            var bghttp = require("nativescript-background-http");
                            var session = bghttp.session("image-upload");
                            let token = JSON.parse(appSettings.getString('token'));

Это запрос

                            var request = {
                                url: environment.apiUrl + 'users/1/photos',
                                method: "POST",
                                headers: {
                                    "Content-Type": "form-data/File",
                                    "Authorization": "Bearer " + token
                                },
                                description: "Uploading "
                            };

Это задача, я отправляю изображение и запрос

                            var task = session.uploadFile(imgSrc, request);

                            task()

                        },
                            err => {
                                console.log('Error getting image source: ');
                                console.error(err);
                                alert('Error getting image source from asset');
                            });
                    });
                }, (error) => {
                    console.log("Error: " + error);
                });
        },
        () => alert('permissions rejected')
    );
}

Я думаю, проблема в том, что он отправляется как ImageAsset, а не как «файл» (но я не уверен). Я не думаю, что мне нужно менять тип файла, мне просто нужно дать ему знать, что это «Файл», как я делаю в почтальоне

Вот как это выглядит в почтальоне (это работает)

image

Ответы [ 2 ]

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

Это верно, по крайней мере для iOS ресурс изображения не является файлом. Он просто содержит ссылку на PHAsset.

Также кажется, что вы передаете источник изображения непосредственно в плагин. Это должен быть путь к файлу. Вам нужно будет записать изображение в вашу локальную папку, а затем использовать путь к файлу. Используйте метод saveToFile(...) в экземпляре ImageSource, затем передайте путь к файлу в фоновый плагин http.

imgSr c .saveToFile (filePath, imageFormat)

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

Вот минимальное решение:

document.getElementById('file').addEventListener('change', function () {
  fetch('https://api.imgur.com/3/upload', { method: 'POST', body: document.getElementById('file').files[0] });
});
<input id="file" type="file">

Код не работает во фрагменте StackOverflow из-за CORS , но вы получаете идею

...