【问题标题】:ERROR: "Could not find a part of the path"错误:“找不到路径的一部分”
【发布时间】:2015-05-14 22:10:59
【问题描述】:

我在用 ASP.NET 开发网站方面还是个新手,或者只是一般的网站。

我编写了一个网站,在 Localhost 上运行得非常好,但是当我把它放到网上时,当我尝试上传文件时出现此错误。

代码:

FileUpload_Billede.SaveAs(Server.MapPath("~/img/upload/") + FileUpload_Billede.FileName);
MakeThumb(FileUpload_Billede.FileName, "img/upload/", 295, "/img/sponsor/");  

我在同样使用 FileUpload 的同一个 webhotel 上建立了另一个网站,但没有出现错误。

我在互联网上阅读了很多内容,说是 IIS 导致了问题。我以前从未接触过IIS,这就是为什么我不明白为什么现在它会出现问题?在这种情况下,我不知道在 IIS 管理器程序中该做什么。我希望有人可以帮助我,因为我完全迷路了。

如果您需要更多信息,请告诉我。

编辑:我被要求编写 MakeThumb 方法的定义。这里是:

private void MakeThumb(string Filename, string UploadFolder, int bredde, string thumbuploadfolder)
{
    // Kompliceret Kode fundet fra nettet om upload og skalering af billede.

    // find det uploadede image
    System.Drawing.Image OriginalImg = System.Drawing.Image.FromFile(Server.MapPath("~/") + UploadFolder + Filename);

    // find højde og bredde på image
    int originalWidth = OriginalImg.Width;
    int originalHeight = OriginalImg.Height;

    // bestem den nye bredde på det thumbnail som skal laves
    int newWidth = bredde;

    // beregn den nye højde på thumbnailbilledet
    double ratio = newWidth / (double)originalWidth;
    int newHeight = Convert.ToInt32(ratio * originalHeight);


    Bitmap Thumb = new Bitmap(newWidth, newHeight, PixelFormat.Format24bppRgb);
    Thumb.SetResolution(OriginalImg.HorizontalResolution, OriginalImg.VerticalResolution);

    // Hvis billedet indeholder nogen form for transperans 
    //(mere eller mindre gennemsigtig, eller en gennemsigtig baggrund) bliver det gjort her
    Thumb.MakeTransparent();


    // opret det nye billede
    Graphics ThumbMaker = Graphics.FromImage(Thumb);
    ThumbMaker.InterpolationMode = InterpolationMode.HighQualityBicubic;

    ThumbMaker.DrawImage(OriginalImg,
        new Rectangle(0, 0, newWidth, newHeight),
        new Rectangle(0, 0, originalWidth, originalHeight),
        GraphicsUnit.Pixel);

    // encoding
    ImageCodecInfo encoder;
    string fileExt = System.IO.Path.GetExtension(Filename);
    switch (fileExt)
    {
        case ".png":
            encoder = GetEncoderInfo("image/png");
            break;

        case ".gif":
            encoder = GetEncoderInfo("image/gif");
            break;

        default:
            // default til JPG 
            encoder = GetEncoderInfo("image/jpeg");
            break;
    }

    EncoderParameters encoderParameters = new EncoderParameters(1);
    encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, 100L);

    // gem thumbnail i mappen /Images/Uploads/Thumbs/
    Thumb.Save(Server.MapPath("~") + thumbuploadfolder + Filename, encoder, encoderParameters);

    // Fjern originalbilledet, thumbnail mm, fra computerhukommelsen
    OriginalImg.Dispose();
    ThumbMaker.Dispose();
    Thumb.Dispose();

}

【问题讨论】:

  • 请发布 SaveAs 和 MakeThumb 函数定义。
  • SaveAs 是默认定义的,不是我自己定义的。我发布了 MakeThumb 的定义。
  • FileUpload_Billede.SaveAs(Server.MapPath("~/img/upload/") + FileUpload_Billede.FileName);处下断点,看看路径是什么

标签: c# asp.net iis


【解决方案1】:

尝试在您的主网站文件夹中添加 DMS 文件夹,然后从属性中更改权限以使每个人都可以在此文件夹上读/写

【讨论】:

    【解决方案2】:

    您必须确保 img/upload 文件夹存在于您的服务器上并且应该可以访问。

    【讨论】:

    • 文件夹已经存在。正如我所说,当我在本地主机上运行网站时,我可以毫无问题地上传。当我尝试从在线网站上传文件时出现问题。但是文件夹也在那里。
    【解决方案3】:

    检查错误的确切位置并缩小范围 - 我们不需要完全实现 MakeThumb,只需要错误所在的位置。

    这些文件夹可能存在,但您的应用程序的应用程序池的身份可能没有访问权限。

    检查两个文件夹(一些 cmets 提到“文件夹”但拇指被保存到不同的文件夹。

    如果可能,使用 Debug(而不是 Release)进行部署以获取行号,如果没有,则添加一些日志记录(例如 log4net)或跟踪并添加路径的详细信息。

    在尝试保存之前使用System.IO.Directory.Exists()

    它可能是.SaveAsFromFileThumb.Save 中的一个——而且您对每一个都使用不同的实现。

    作为一个额外的:总是使用Path.System.IO.Path.Combine(),所以没有可能导致问题的额外//

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 2016-01-25
      相关资源
      最近更新 更多