ASP.NET Web API Избегайте сохранения файла как «BodyPart _...» - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь создать 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);
            }
...