Не удается загрузить файл изображения из ng-file-upload в веб-API

Я использую эту директиву (ng--file-upload) для загрузки изображения.
Мне нужно включить файл изображения в POST веб-API ASP.NET, но у меня ничего не получается.
Это мой метод на сервере:

public async Task<HttpResponseMessage> SaveData([FromBody]PostModel data)

Когда я публикую данные (из js angular), все данные здесь, кроме загруженного файла:

$http({
            method: 'POST',
            url: path,
            data: data,
            file: photoFile
        }).then(function...

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

В ответ получаю:

"Invalid 'HttpContent' instance provided. It does not have a content type header starting with 'multipart/'.
 Parameter name: content"

В этой строке:

var provider = new MultipartMemoryStreamProvider();
            await Request.Content.ReadAsMultipartAsync(provider);

var data = {            
            "Username": $scope.username,
            transformRequest: angular.identity,
            headers: { 'Content-Type': undefined }
        };

        var fd = new FormData();
        fd.append('file', $scope.photoFile);

        $http({
            method: 'POST',
            url: 'path', fd, 
            data: data
        }).the

person 1110    schedule 26.05.2016    source источник
comment
Вы можете использовать службу Upload.upload() для отправки файла. Читайте документы.   -  person danial    schedule 26.05.2016


Ответы (1)


Используйте API FormData:

HTML:

<div class="button" ngf-select="upload($file)">Upload on file select</div>

контроллер:

 $scope.upload = function (file) {
    var fd = new FormData();
    fd.append('file', file);

    //Append other data
    //angular.forEach(data,function(v,k){
    //    fd.append(k,v);
    //});

    $http.post('your-upload-url', fd, {
        transformRequest: angular.identity,
        headers: {'Content-Type': undefined}
    })
    .then(function(res){
        // get upload res
    });
};
person Yin Gang    schedule 26.05.2016
comment
Но как я могу получить файл на стороне веб-API? - person 1110; 26.05.2016
comment
Извините, я думал, что это угловая проблема.... Не силен в С#, но вы можете проверить это - person Yin Gang; 26.05.2016
comment
Я обновил вопрос с отправкой данных, как вы предлагаете. Возможно, вы знаете, почему я получаю сообщение об ошибке из вопроса? - person 1110; 26.05.2016
comment
Очевидная ошибка заключается в том, что fd — это всего лишь data, о котором вы думали, например `$http({...,data:fd,..}). - person Yin Gang; 26.05.2016
comment
не ставьте transformRequest и headers в data, см. это - person Yin Gang; 26.05.2016