Ошибка загрузки файла angularJs: текущий запрос не является составным запросом - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь загрузить файл с помощью angularjs, но есть проблема: «Текущий запрос не является составным запросом», и я почти пробую каждое решение от Google, но не решаю мою проблему, надеюсь, кто-то может ответить на мой вопрос, СПАСИБО.

это моя конфигурация springMVC

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="UTF-8"></property>
    <property name="maxUploadSize" value="5242880"></property>
</bean>

это HTML

<input type="file" id="file"/>
<button class="btn btn-primary" type="button" ng-click="uploadFile()">上传</button>

это угловой контроллер

$scope.uploadFile = function () {
    uploadService.uploadFile().success(function (response) {
        if(response.success){
            $scope.image_entity.url = response.message;
        }else{
            alert(response.message);
        }
    })
}

этоугловой сервис

this.uploadFile = function () {
    var formData = new FormData();
    formData.append("file", file.files[0]); //文件上传框的name
    return $http({
        url: "/upload.do",
        method: "post",
        data: formData,
        headers: {"Content-Type": undefined},
        transformRequest: angular.identity
    })
}

это uploadController

@RequestMapping("/upload")
public ReturnResult upload(MultipartFile file){
    String fullName = file.getOriginalFilename(); 
    String extName = fullName.substring(fullName.lastIndexOf(".") + 1); 
    try {
        FastDFSClient client = new FastDFSClient("classpath:config/fdfs_client.conf");
        String fileId = client.uploadFile(file.getBytes(), extName);
        String url = file_server_url + fileId;  
        return new ReturnResult(true, url);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Я вижу, что браузер Google отправляет

Метод запроса: POST

Заголовки запроса

Content-Type: multipart / form-data;border = ---- WebKitFormBoundaryrzP8MUha8lcbDzdn

Данные формы

------ WebKitFormBoundaryrzP8MUha8lcbDzdn

Расположение содержимого: данные формы;Name = "файл";filename = "1.jpg"

Тип содержимого: image / jpeg

------ WebKitFormBoundaryrzP8MUha8lcbDzdn -

это проблема?пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

ОН, я нашел основную причину.Невероятно, это моя ошибка диспетчера.Класс "FastDFSClient" не найден, потому что этот класс не принадлежит этому модулю, я использую IDEA и добавляю зависимость к структуре проекта, но не добавляю ее в pom.На самом деле я не знаю, в чем разница между ними, но если вы не добавите в pom, он покажет «NoClassDefFoundError».Поэтому я добавляю зависимость к pom, тогда проблема исчезла.Я всегда думаю, что это ошибка на передней панели или у меня плохая конфигурация, но я никогда не ожидаю, что это ошибка на задней панели, как это печально ..

0 голосов
/ 24 сентября 2019

Я не уверен насчет первопричины.Но я столкнулся с той же проблемой, и добавив приведенный ниже код, она устранила проблему.Попробуйте добавить код ниже в вашей конфигурации

@Bean
public MultipartResolver multipartResolver() {
    return new CommonsMultipartResolverMine();
}

public static class CommonsMultipartResolverMine extends CommonsMultipartResolver {

    @Override
    public boolean isMultipart(HttpServletRequest request) {
        final String header = request.getHeader("Content-Type");
        if (header == null) {
            return false;
        }
        return header.contains("multipart/form-data");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...