Как отправить изображение без элемента формы ввода файла?

Я использую angular.js и обычный пост API для отправки изображения. Изображение поступает с камеры мобильного телефона, а не из поля ввода файла. Как я могу упаковать данные файла изображения, не отправляя его с пост-запросом?

2 ответа

Вы можете просто опубликовать изображение в виде строки base64. Вот пример из приложения, которое я построил.

$scope.Data = {
            DocTypeGID: 0,
            ATypeGID: 1017,
            Value: '',
            Image: null,
            isCompressed: '',
        };
 //sets Data.Image to a base 64 string
        $scope.takePhoto = function () {
            $ionicScrollDelegate.scrollTop();
            console.log('fired camera');
            $scope.uploadList = false;
            $ionicPlatform.ready(function () {
                var options = {
                    quality: 100,
                    destinationType: Camera.DestinationType.DATA_URL,
                    sourceType: Camera.PictureSourceType.CAMERA,
                    allowEdit: false,
                    encodingType: Camera.EncodingType.PNG,
                    targetWidth: 800,
                    targetHeight: 1100,
                    popoverOptions: CameraPopoverOptions,
                    saveToPhotoAlbum: false
                };
                $cordovaCamera.getPicture(options).then(function (imageData) {
                    $ionicLoading.show({
                        template: 'Processing Image',
                        duration: 2000
                    });
                    $scope.image = "data:image/png;base64," + imageData;
                    if (ionic.Platform.isAndroid() === true) {
                        $scope.Data.Image = LZString.compressToUTF16($scope.image);
                        $scope.Data.isCompressed = 1;
                    } else {
                        $scope.Data.Image = $scope.image;
                        $scope.Data.isCompressed = 0;
                    }
                    if ($scope.tutorial) {
                        $scope.showAlert("Instructions: Step 3", '<div class="center">Now that you have taken a photo of the POD form, you must upload it to the server. Press the upload doc button in the bottom right of the screen.</div>');
                    }
                    $scope.openModal();
                }, function (err) {
                    console.log(err);
                });
            }, false);
        };

$scope.UploadDoc = function () {
            var req = {
                method: 'POST',
                url: ffService.baseUrlAuth + 'cc/upload',
                headers: {
                    'x-access-token': ffService.token
                },
                data: $scope.Data
            };
            if ($scope.Data.Image === null || $scope.Data.Value === '') {
                $scope.showAlert("Uh Oh!", '<div class="center">Please take a photo of your document before attempting an upload.</div>');
            } else if ($scope.Data.DocType === 0) {
                $scope.showAlert("Uh Oh!", '<div class="center">Please select a doc type for your document before uploading.')
            } else {
                $http(req).success(function (data, status, headers, config) {
                    localStorage.setItem('tutorial', false);
                    $scope.tutorial = false;
                    $scope.getUploads($scope.PODOrder.OrderNo);
                    $scope.showAlert("Success!", '<div class="center">Your Document has been successfully uploaded!</div>');
                    $scope.uploadList = true;
                }).error(function (data, status, headers, config) {
                    $rootScope.$broadcast('loading:hide');
                    $scope.showAlert("Something went wrong!", '<div class="center">Please make sure you have an internet connection and try again.</div>');
                }).then(function (data, status, headers, config) {
                    $scope.Data.Image = null;
                });
            }
        };

Используйте dropzone js dropzone js позволяет перетаскивать загружаемые файлы через страницу ajax /submit

Другие вопросы по тегам