Я использую AngularJS для создания моего приложения. В нем у меня есть форма, которую пользователь может заполнить информацией. Это создает объект POST для базы данных с использованием WebAPI.Как отправить POST объект с файлом, прикрепленным в WebAPI?
Вот Угловой код:
$scope.test_object =
{
'Title': $scope.test_object.title,
'Description': $scope.test_object.description,
};
// POST to the database
$http.post(some_url, JSON.stringify($scope.test_object)).then(function (response) {
// do something
}
);
А вот мой класс в Visual Studio:
public class ClassName
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
Это работает, как это должно без проблем. Моя проблема заключается в том, что форма имеет возможность прикреплять файл. У меня есть контроллер в Visual Studio, чтобы отправить файл, вот код:
public class FileUploadController : ApiController
{
[Route("api/upload")]
public async Task<HttpResponseMessage> Post()
{
try
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
//Save To this server location
var uploadPath = HttpContext.Current.Server.MapPath("~/Data");
//Save file via CustomUploadMultipartFormProvider
var multipartFormDataStreamProvider = new CustomUploadMultipartFormProvider(uploadPath);
// Read the MIME multipart asynchronously
await Request.Content.ReadAsMultipartAsync(multipartFormDataStreamProvider);
// Show all the key-value pairs.
foreach (var key in multipartFormDataStreamProvider.FormData.AllKeys)
{
foreach (var val in multipartFormDataStreamProvider.FormData.GetValues(key))
{
Console.WriteLine(string.Format("{0}: {1}", key, val));
}
}
//In Case you want to get the files name
//string localFileName = multipartFormDataStreamProvider
// .FileData.Select(multiPartData => multiPartData.LocalFileName).FirstOrDefault();
return new HttpResponseMessage(HttpStatusCode.OK);
}
catch (Exception e)
{
return new HttpResponseMessage(HttpStatusCode.NotImplemented)
{
Content = new StringContent(e.Message)
};
}
}
}
Я нашел этот код в Интернете, и это работает для отправки файлов. Это отправляет любой файл в указанную папку (/ Данные).
Теперь мой вопрос: как создать связь между объектом и вложением? Как определить, какие файлы связаны с каждым объектом? Я как-то отправляю идентификатор объекта вместе с файлом?
Спасибо за любую помощь.