【问题标题】:Parameter is not valid error when creating new bitmap创建新位图时参数无效错误
【发布时间】:2011-11-30 00:15:13
【问题描述】:

我在我的页面上显示图像,然后尝试查找图像的当前高度以便垂直定位它们。我通过创建一个新的位图然后获取位图的高度来做到这一点,如下:

Dim sampleImg As New System.Drawing.Bitmap(Server.MapPath(String.Format("/Uploads/Products/Images/w100h100/{0}", e.Item.DataItem("Filename"))))
Dim imgHeight As Integer = sampleImg.Height

当我在本地机器上运行它时,一切正常。但是,到目前为止,我最近将该站点上传到了我的开发服务器,当我从那里运行相同的代码时,我收到了以下错误消息:

参数无效

我一直在搜索论坛以尝试找到解决方案,但我最终有点不确定还能去哪里寻找,因为该文件肯定存在于开发服务器上,并且代码在我的本地机器上运行良好。我使用的服务器是 VPS,我是一个使用服务器的初学者,所以我不知道是否有什么我没有设置的东西阻止它工作?

在尝试寻找解决方案的同时,我也尝试了以下代码,但收到 System.IO.FileNotFoundException 错误消息:

Dim sampleImg As System.Drawing.Image = System.Drawing.Image.FromFile(Server.MapPath(String.Format("/Uploads/Products/Images/w100h100/{0}", e.Item.DataItem("Filename"))))

我想知道是否有人可以帮助我找到解决方案,或者是否有其他方法可以达到相同的目的?

非常感谢所有帮助。谢谢。

【问题讨论】:

  • 调试时,全路径与图片实际全路径匹配吗?例如,您是否尝试将其复制/粘贴到 Windows 资源管理器中,它是否返回图像?
  • 感谢您的帮助 - 是的,我已经尝试过了,所以我知道该图像确实存在于该位置。

标签: asp.net image bitmap


【解决方案1】:

我认为您必须使用~ root 运算符来解决路径问题。

Dim sampleImg As System.Drawing.Image = 
          System.Drawing.Image.FromFile(Server.MapPath(
          String.Format("~/Uploads/Products/Images/w100h100/{0}", 
          e.Item.DataItem("Filename"))))

或者指定的文件不是有效的图像文件。

【讨论】:

  • 感谢您的建议 - 不幸的是,这没有任何区别,我仍然收到相同的错误消息。
  • @Leah :您是否在执行该部分代码后处理所有图像对象?编写一个小代码并测试/运行在开发服务器上发生的事情。
  • 我最初并没有处理 Image 对象,但我现在添加了一些代码来处理使用后的对象。不幸的是,这在开发服务器上仍然没有任何区别,而且我仍然收到 System.IO.FileNotFoundException 错误消息。
  • 是权限问题吗?您是否检查过您尝试加载的文件是否已分配给 ASP.Net 工作进程的读取权限?
  • 如果您右键单击文件,属性,选择“安全”选项卡,您将获得有权访问该文件的用户列表。快速检查是添加具有读取权限的“所有人”。要将其仅锁定到您的 ASP.Net 实例,您应该启动 IIS 管理器,右键单击您的应用程序池,身份是您的应用程序在其下运行的用户。
【解决方案2】:

如果您通过 IIS 运行,则可能是文件类型未在站点可用的 MIME 类型中设置。

http://technet.microsoft.com/en-us/library/bb742440.aspx

在 IIS7 中,每个站点都有一个名为“MIME 类型”的模块。检查文件扩展名是否在列表中,如果没有,请使用适当的 MIME 类型添加它(上面链接中的 mime 类型列表)

【讨论】:

  • 非常感谢您的建议。我刚刚检查过,但所有相关的图像文件类型都已添加到列表中,因此似乎并非如此。
【解决方案3】:

这可能是文件权限问题,您需要确保您网站的 IUSR 帐户对图像文件具有读取权限。为此 -

右键单击文件,属性,选择“安全”选项卡 - 您将获得有权访问该文件的用户列表。快速检查是添加具有读取权限的“所有人”。要将其仅锁定到您的 ASP.Net 实例,您应该启动 IIS 管理器,右键单击您的应用程序池,身份是您的应用程序在其下运行的用户。

【讨论】:

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