HTTP-пост с formdata и другими полями управления не собирается в Java - PullRequest
0 голосов
/ 07 октября 2019

Я новичок в AngularJs. Я пытаюсь загрузить файл изображения (.bmp, .jpg и т. Д.) Вместе с его ярлыком через API пост-отдыха Jax-RS, но не могу войти в java post api с моего контроллера angularjs.

Покаотладка элемента управления не входит в Java-файл. Не могли бы вы помочь понять, что неправильно в моем коде.

myfile.html

Label of File: <input type="text" name="iconlabel" data-ng-model="imporLabelName"><br>
Import a File: <input type="file" id="myFile" name="myfile" data-file-model="myfile"><br>
<button type="button" class="btn btn-primary pull-right" data-ng-click="uploadfile();">Submit
                </button>

myFileController

define([ '{angular}/angular' ], function(angular) {
var module = angular.module('myFile', [ 'ngResource', 'colorpicker-dr' ]);

module.controller('myFileController', [ '$scope', '$sce', '$http', '$location', '$window', 'w20MessageService'
,function($scope, $sce, $http, $location, $window, w20MessageService) {

            var config = { 
                    headers: {
                        "Content-Type": undefined,
                    }
                };

            /*** Modale for MyFile **/
            $scope.openMyFile = function() {
                $("#myfile").modal("show");
            };

            $scope.uploadfile = function() {
                $scope.file = document.getElementById('myFile').files[0];
                alert('LabelName = '+$scope.imporLabelName);

                var formData = new $window.FormData();
                formData.append("label", $scope.imporLabelName);
                formData.append("file", $scope.file);
                alert('File = '+$scope.file);
                var url = "uploadfile/label="+$scope.imporLabelName;
                alert("URL = "+url);
                $http.post(url,$scope.formData,config).success(function(response) {
                    $scope.result = "SUCCESS";
                }).error(function(response, status) {
                    if (status === 400) {
                        w20MessageService.addMessageErreur(data.message, "msgGererParam");
                    } else {
                        w20MessageService.addMessageErreur("eox.message.error.load.traitement", "msgGererParam");
                    }
                });
              $("#myfile").modal("hide");
            };
        } ]);
return {
    angularModules : [ 'digitalJes' ]
};
});

Java API-код

@POST
@Path("/uploadfile/{label}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN)
public Response uploadFile(@PathParam("label") String label, @FormDataParam("file") InputStream fileInputStream,
        @FormDataParam("file") FormDataContentDisposition fileInputDetails) {

    CacheControl cc = new CacheControl();
    cc.setNoCache(true);
    return Response.ok(uploadFileUtil.uploadFile(label, fileInputStream, fileInputDetails)).cacheControl(cc).build();
}

Код ошибки и сообщение об ошибке

Состояние HTTP 400 - неверный запрос

Сервер не может или не будет обрабатывать запрос из-за того, что воспринимается как ошибка клиента (например, неправильно сформированный синтаксис запроса, неправильное формирование кадра сообщения о запросе или обманчивая маршрутизация запроса).

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Изменения, которые я сделал, чтобы получить эту работу.

Файл Java.

@POST
@Path("/save")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN)
public Response uploadFile(@FormDataParam("jesId") Integer jesId, @FormDataParam("label") String label,
        @FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetails) {

    CacheControl cc = new CacheControl();
    cc.setNoCache(true);
    return Response.ok(uploadUtility.uploadFile(jesId, label, uploadedInputStream, fileDetails, context)).cacheControl(cc).build();
}

Файл JS

$scope.uploadfile  = function(jes) {

                /** Getting File from Form **/
                $scope.file = document.getElementById('myFile').files[0];

                /** Getting Label from Form **/
                var label = $scope.iconLabel;

                /** Validating form data **/
                $scope.result = $scope.validateData(label,$scope.file);

                if($scope.result == true){
                    /** Creating formdata object seeting form values **/
                    var formData = new $window.FormData();
                    formData.append("file", $scope.file);
                    formData.append("label", label);
                    formData.append("id", $scope.id);

                    /** Making service call to REST API **/
                    $http.post("uploadfile/save",formData,config).success(function(response) {
                        $scope.result = "SUCCESS";
                    }).error(function(response, status) {
                        if (status === 400) {
                            w20MessageService.addMessageErreur(data.message, "msgGererParam");
                        } else {
                            w20MessageService.addMessageErreur("eox.message.error.load.traitement", "msgGererParam");
                        }
                    });
                }
            };
0 голосов
/ 07 октября 2019
 @FormDataParam("file") InputStream fileInputStream,
 @FormDataParam("file") FormDataContentDisposition fileInputDetails

Кажется, что обе переменные fileInputStream и fileInputDetails инициализируются из параметра file. Также в html поле имеет значение

...
Import a File: <input type="file" id="myFile" name="myfile" data-file-model="myfile"><br>

Здесь id = "myFile" и name = "myfile" , и вы получаете их как "@FormDataParam (" файл ")" .

...