3

我有一个图像存储在服务器上的位置:

C:\inetpub\wwwroot\imageupload\images

在我的代码中,我想使用文件夹图像中的图像,所以我尝试如下:

Server.MapPath("/images/sample1.jpg")

但我得到的错误是: 在此处输入图像描述

请帮我解决错误

关于要求发布代码的几个答案,如下所示

.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<%@ Register Assembly="CS.Web.UI.CropImage" Namespace="CS.Web.UI" TagPrefix="cs" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
 <cs:CropImage ID="wci1" runat="server" />
    </body>
</html>

.aspx.cs

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

        wci1.Crop(Server.MapPath("/imageupload/images/sample1.jpg"));

        /*
         this part is just to show the image after its been cropped and saved! so focus on just the code above.
         */
        Image img = new Image();
        img.ImageUrl = "images/sample1.jpg?rnd=" + (new Random()).Next();  // added random for caching issue.
        this.Controls.Add(img);
    }
}

裁剪方法来自我从http://imagecropping.codeplex.com/使用的 .dll 文件

4

5 回答 5

4

CSA.Web.UI.CropImage.Crop如堆栈跟踪所述,该方法存在错误。

Server.MapPath,据我所知,不会返回空字符串(如果它不能映射,它会抛出异常 - 但不是 a NullReferenceException)。

我建议您查看我提到的方法,并可能发布相关代码。

编辑:

因此,我快速查看了您提到的 CodePlex 项目Crop中的代码,发现了以下几行(格式化我的):

private string ImagePath { get { return ViewState["ImageUrl"].ToString(); } }

drawing.Image image = drawing.Image.FromStream(
    new MemoryStream(
        System.IO.File.ReadAllBytes(
            HttpContext.Current.Server.MapPath(this.ImagePath)
        )
    )
);

cropedImage.Save(path);

现在,在我看来:

  • 参数Path不为空*
  • 参数ImageUrl 空**

*虽然它可能是“不正确的”,但现在不是问题。

**表示调用ToString是此代码中的破坏因素。

基本上,控件没有设置裁剪的图像,这在您自己的代码中很明显:

//currently no ImageUrl set...
<cs:CropImage ID="wci1" runat="server" />

//your'e trying to crop here without an ImageUrl...
wci1.Crop(Server.MapPath("/imageupload/images/sample1.jpg"));   

解决方法是通过ImageUrlAFAIK 指定图像,但是我看不到如何执行此操作。

于 2011-05-12T11:28:46.627 回答
1

您已将图像存储在其中,imageupload\images但是当您尝试抓取它们时却忘记在imageupload目录中添加:

Server.MapPath("/imageupload/images/sample1.jpg")
于 2011-05-12T11:27:58.380 回答
0

尝试使用相对路径:

Server.MapPath("images/sample1.jpg")
于 2011-05-12T11:28:51.733 回答
0

考虑使用“~/images/sample1.jpg”作为您的来源。"~" 被调用 Server.MapPath 中的应用程序名称替换

于 2011-05-12T11:29:59.020 回答
0

根据: https ://webcropimage.svn.codeplex.com/svn/trunk/CS.WebControls/WebCropImage/CropImage.cs

方法 Crop(),给出保存裁剪图像的路径。

应该裁剪哪个图像存储在wci1.ImagePath

请检查此值是否为null,这应该指出问题所在。

由于没有<Form runat="Server">,可能无法访问 ViewState:

private string ImagePath { get { return ViewState["ImageUrl"].ToString(); } }
于 2011-05-12T12:03:53.953 回答