【问题标题】:Parameter is not valid Exception in creating new Bitmap in C#?在 C# 中创建新位图时参数无效异常?
【发布时间】:2014-06-07 06:13:57
【问题描述】:

我们有一种方法可以将图像保存为正确的格式,如下所示:

public static string SaveImageAsCorrectFormat(string tempFilePath, string newFileName, string destinationDirectoryPath)
{
    using (Image image = new Bitmap(tempFilePath))// Exception : Parameter is not valid.
    {
        string extension = image.RawFormat.GetExtension();
        string newAbsoluteFilePath = Path.Combine(destinationDirectoryPath, string.Format("{0}.{1}", newFileName, extension));
        image.Save(newAbsoluteFilePath, image.RawFormat);
        return newAbsoluteFilePath;
    }
}

但在以下行中发生了异常:

//Parameter is not valid.
using (Image image = new Bitmap(tempFilePath))

我将其更改为以下但 Out of memory 发生了:

 // Out of memory
using (Bitmap image = (Bitmap)Image.FromFile(tempFilePath))

图像大小为 10KB,10GB 内存可用。

有什么问题?

附注:
我在本地没有问题。但是当我在服务器上发布软件时,就会出现这个问题。

编辑:
我正在使用windows Server 2012 R2IIS 8.5.9600.16384。应用程序(网站)可以完全控制 IIS_IUSRSIUSR
我认为问题与权限无关,因为我可以使用以下代码打开文件:

using (FileStream fileStream = File.Open(tempFilePath, FileMode.Open)) // OK
using (Image image = new Bitmap(fileStream))// Exception : Parameter is not valid.

解决方案:
我将网站application pool identity 更改为Local System 现在可以了,可以更改应用程序池身份还是安全漏洞?

【问题讨论】:

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


【解决方案1】:

图片似乎已损坏,或者只是文件扩展名错误。

如果扩展名是jpeg,.NET 将尝试将其解码为 JPEG。请注意,此行为与浏览器不同:浏览器倾向于查看文件的内容并据此决定其格式;因此,您可能会误以为 jpeg 文件很好,因为它显示在浏览器中,而实际上它包含 PNG 图像。

如果您在 Firefox 中打开图像文件,窗口标题栏会告诉您 real 文件格式与文件扩展名无关。

【讨论】:

  • 我将图像文件从服务器复制到我的系统,我可以用new Bitmap(filePath)打开它?文件损坏了吗?
【解决方案2】:

您必须授予您尝试通过 Web 应用程序访问的文件夹的权限。如果您使用的是 cPanel check here.

【讨论】:

  • 请在文件夹权限中添加“Everyone”后重试,看看是否有效。您还使用“相对地址”还是“绝对地址”。
  • 我用 FullControl 添加了Everyone,但异常再次发生。我正在使用“绝对地址”
  • 尝试使用“相对寻址”,请添加有关错误的更多详细信息,您可以找到错误代码/否。
  • 我将网站应用程序池标识更改为Local System 现在可以了,可以更改application pool identity 还是安全漏洞?
  • 据我所知,如果您已正确授予权限并且数据库和网站在同一台服务器上,则没有问题。您可以获取有关安全问题的更多信息here
【解决方案3】:

当天晚些时候,但我找不到可靠的解决方法。有时环境问题会影响操作。就我而言,如果发生异常,我会多次重试该操作。如果您采用这种方法,您的操作应该会成功,但要确保该操作是幂等的。

例如在 C# 中

Action action = () => { //call SaveImageAsCorrectFormat }
try {
  action();
}
catch
{
  try {
    action();
  catch (Exception exception) {
    //handle
  }
}

【讨论】:

    猜你喜欢
    • 2011-09-14
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多