【问题标题】:Save posted image file error on ASP.NET在 ASP.NET 上保存发布的图像文件错误
【发布时间】:2018-02-20 19:03:22
【问题描述】:

所以,我想上传一个图像文件并将其保存到某个路径。它在第一次尝试时有效,但如果要第二次上传它,即使我关闭应用程序并再次运行它,它也会出错

The process cannot access the file '..mypath..' because it is being used by another process

我该如何解决这个问题?

这是我的代码

public ActionResult UploadImage(HttpPostedFileBase file, string text)
    {
        if (file != null && file.ContentLength > 0)
        {
            var fileName = datetime + "_" + Path.GetFileName(file.FileName);

            log_file = fileName;
            var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
            file.SaveAs(path); //error

            Bitmap bmp = new Bitmap(path);

            bmp = EmbedText(bmp, "Some Text");

            var outputFileName = Path.Combine(Server.MapPath("~/StegoImages/"), fileName); ;
            using (MemoryStream memory = new MemoryStream())
            {
                using (FileStream fs = new FileStream(outputFileName, FileMode.Create, FileAccess.ReadWrite))
                {
                    bmp.Save(memory, ImageFormat.Png);
                    byte[] bytes = memory.ToArray();
                    fs.Write(bytes, 0, bytes.Length);
                }
            }

            string coba = extractText(bmp);
        }
        else
        {
            TempData["flag_no_file"] = '1';
            return RedirectToAction("UploadImage");
        }
        return View();
    }

有人可以帮助我吗?可能是我上传图片的代码不对,怎么办呢?

我正在使用 C# asp .net mvc

对不起我的英语..

【问题讨论】:

  • 您必须关闭文件。
  • 是的,也是这个问题,如何关闭文件?
  • outputFileName..Close();

标签: c# asp.net asp.net-mvc


【解决方案1】:

我想知道您如何调用此 API 请求。 但是试试这段代码。图片在此处在请求正文中发送。

 [HttpPost]        
 public HttpResponseMessage UploadJsonFile()
 {        
                userID = "any name";    
                    HttpResponseMessage response = new HttpResponseMessage();
                    var httpRequest = HttpContext.Current.Request;
                    if (httpRequest.Files.Count > 0)
                    {
                        foreach (string file in httpRequest.Files)
                        {
                            try
                            {
                                var postedFile = httpRequest.Files[file];
                                var filePath = HttpContext.Current.Server.MapPath("~/ProfileImages/"+ userID);
                                if (!Directory.Exists(filePath))
                                {
                                    Directory.CreateDirectory(filePath);
                                }
                                else
                                {
                                    DirectoryInfo directory = new DirectoryInfo(filePath);
                                    FileInfo[] files = directory.GetFiles("*.jpg");
                                    foreach (FileInfo fil in directory.GetFiles())
                                    {
                                        fil.Delete(); //Delete existing image...
                                    }
                                }
                                Random rnd = new Random();
                                int num = rnd.Next(1, 100);
                                postedFile.SaveAs(filePath +"/"+ num+postedFile.FileName);
                            }
                            catch (Exception e)
                            {
                                ExceptionLogging.SendErrorToText(e);
                            }
                        }
                    }
                    return response;
                }

【讨论】:

    【解决方案2】:

    再读一遍那篇文章,它会对你有所帮助。

    How save uploaded file? c# mvc

    另外,请确保您的存档名称不存在并且任何软件都不会使用它。

    var fileName = datetime + "_" + Path.GetFileName(file.FileName);
    

    检查此行和服务器路径。

    【讨论】:

    • 我想说,也许您的保存路径中已经有相同的文件名,并且某些软件正在使用它。否则,您的保存代码对我来说是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 2019-01-04
    • 2015-05-22
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多