Я пытаюсь создать API, который принимает ключи и файлы, загруженные через formData.
Перед физическим сохранением файла мне нужно проверить, принят ли тип файла (это PDF, слово ...), если он не принят, файл должен быть отклонен и не сохранен ни в одной папке.
Я нашел способ, как это сделать, и он успешно работает, но проблема в том, что когда файл отклонен, я обнаружил, что в папке содержатся файлы, имена которых начинаются с BodyPart _...; Я понял, что они сохраняются только при отклонении файла, есть ли способ избежать этого?
Ниже мой код:
public async Task<HttpResponseMessage> PostFile()
{
try
{
// checking if multipart
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
// checking contentType allowed
List<String> lstTypesAllowed = new List<String>();
lstTypesAllowed.Add("application/pdf"); // pdf
lstTypesAllowed.Add("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); // docx
// creating root
var root = HttpContext.Current.Server.MapPath("~/App_Data/Uploadfiles");
var provider = new MultipartFormDataStreamProvider(root);
var result = await Request.Content.ReadAsMultipartAsync(provider);
// I guess this one is creating BodyPart_ file
// getting keys
var model = result.FormData["requestDetails"];
if (model == null)
{
var response = Request.CreateResponse(HttpStatusCode.BadRequest);
response.ReasonPhrase = "requestDetails cannot be null!";
return response;
}
// converting json to list of requestDetail
List<RequestDetail> lstRequestDetails = Newtonsoft.Json.JsonConvert.DeserializeObject<List<RequestDetail>>(model);
// checking if files exist
if (provider.FileData.Count > 0)
{
// looping over each file
foreach (MultipartFileData fileData in provider.FileData)
{
string fileName = "";
// getting mediaType
string mediaType = fileData.Headers.ContentType.ToString();
// checking if mediaType is allowed
if (lstTypesAllowed.Contains(mediaType))
{
// here I rename then save file in folder Uploadfiles; I save request details of this file in my database
}
}
}
else {
var response = Request.CreateResponse(HttpStatusCode.BadRequest);
response.ReasonPhrase = "No files uploaded!";
return response;
}
}
catch (Exception ex)
{
var response = Request.CreateResponse(HttpStatusCode.InternalServerError);
response.ReasonPhrase = "Error: " + ex.Message;
return response;
}
return Request.CreateResponse(HttpStatusCode.OK);
}