Почему .Save () создает дубликаты файлов? - PullRequest
0 голосов
/ 04 мая 2020

Мой проект берет загруженный файл от пользователя, а также некоторые точки данных из JCrop и обрезает изображение до выбранной части. Затем обрезанному изображению присваивается новое имя, и оно сохраняется на сервере. Однако изображение сохраняется на сервере дважды, один раз с новым именем и еще раз с совершенно другим именем.

КОНТРОЛЛЕР

[HttpPost]
[ValidateAntiForgeryToken]
[ValidImageFile]
public ActionResult _Image(ImageViewModel VM)
{
    if (ModelState.IsValid)
    {
        //Convert from HttpPostedBase to WebImage, then crop the image
        byte[] data;
        using (Stream inputStream = VM.uploadFile.InputStream)
        {
            MemoryStream memoryStream = inputStream as MemoryStream;
            if (memoryStream == null)
            {
                memoryStream = new MemoryStream();
                inputStream.CopyTo(memoryStream);                       
            }
            data = memoryStream.ToArray();
            }
        var Image = new WebImage(data);
        int T = VM.y1;
        int L = VM.x1;
        int B = Image.Height - VM.y2;
        int R = Image.Width - VM.x2;                
        Image.Crop(T, L, B, R);

        //if the user already has an image for their character, delete it.
        string oldImage = HttpContext.Server.MapPath(db.Characters.Find(VM.Id).imagePath);
        if (System.IO.File.Exists(oldImage))
        {
            System.IO.File.Delete(oldImage);
        }
        //generate random file name path, save file to server.
        var fileName = Guid.NewGuid().ToString();
        var filePath = Path.Combine("/Content/Images/charPhoto/", fileName);
        var uploadUrl = HttpContext.Server.MapPath(filePath);

       Image.Save(uploadUrl);

        //save file path to db.
        filePath = filePath + "." + Image.ImageFormat;
        db.Characters.Find(VM.Id).imagePath = filePath;
        db.SaveChanges();

        //returns the image path to jQuery.
        return Content(filePath);


    }
    return View();
}

VIEWMODEL

public class ImageViewModel
    {
        public Guid? Id { get; set; }

        public string ImagePath { get; set; }

        public HttpPostedFileBase uploadFile { get; set; }

        [Required]
        public int x1 { get; set; }
        [Required]
        public int y1 { get; set; }
        [Required]
        public int x2 { get; set; }
        [Required]
        public int y2 { get; set; }


    }

подтверждение дублирования:

enter image description here

Кто-нибудь может мне объяснить, почему это происходит? Это какая-то преднамеренная часть WebImage для резервного копирования данных? Если нет, то что я сделал не так, и что я должен делать вместо этого?

1 Ответ

0 голосов
/ 04 мая 2020

OMG

    string oldImage = db.Characters.Find(VM.Id).imagePath;

    if (System.IO.File.Exists(HttpContext.Server.MapPath(oldImage)))
    {
        System.IO.File.Delete(HttpContext.Server.MapPath(oldImage));
    }

    var filePath = Path.Combine("/Content/Images/charPhoto/", Guid.NewGuid().ToString() + "." + Image.ImageFormat);

    Image.Save(HttpContext.Server.MapPath(filePath));

    //save file path to db.
    db.Characters.Find(VM.Id).imagePath = filePath;
    db.SaveChanges();

    //returns the image path to jQuery.
    return Content(filePath);
...