Server.MapPath выдает ошибку при использовании библиотеки обрезки веб-изображений - PullRequest
3 голосов
/ 12 мая 2011

У меня есть изображение, хранящееся на сервере в расположении:

C:\inetpub\wwwroot\imageupload\images

. В моем коде я хочу использовать изображение из папки images, поэтому я пытаюсь сделать следующее:

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

Но я получаю сообщение об ошибке: enter image description here

Пожалуйста, помогите мне исправить ошибку

Как и в нескольких ответах с просьбой опубликовать код, это выглядит следующим образом

.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);
    }
}

Метод кадрирования из файла .dll, который я использовал с http://imagecropping.codeplex.com/

Ответы [ 5 ]

4 голосов
/ 12 мая 2011

Ошибка в методе CSA.Web.UI.CropImage.Crop, как описано в трассировке стека.

Server.MapPath, насколько мне известно, не будет возвращать пустую строку (будет выброшено исключение, если он не может отобразить - но не NullReferenceException).

I 'Я бы посоветовал вам изучить метод, о котором я упоминал, и, возможно, опубликовать соответствующий код.

РЕДАКТИРОВАТЬ:

Итак, я быстро взглянул на CropКод из проекта CodePlex Вы упомянули и нашли следующие строки (форматирование мое):

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"));   

Исправление - указать изображение с помощью ImageUrl, AFAIK, однако я не вижу, как это сделать.

1 голос
/ 12 мая 2011

Вы сохранили свои изображения в imageupload\images, но когда вы попытались получить их, вы забыли добавить в каталог imageupload:

Server.MapPath("/imageupload/images/sample1.jpg")
0 голосов
/ 12 мая 2011

Согласно: https://webcropimage.svn.codeplex.com/svn/trunk/CS.WebControls/WebCropImage/CropImage.cs

Метод Crop (), дает путь к сохранению обрезанного изображения.

Какая картинка должна быть обрезана, хранится в wci1.ImagePath

Пожалуйста, проверьте, является ли это значение пустым , и это должно указать на проблему.

Поскольку <Form runat="Server"> отсутствует, возможно, он не может получить доступ к ViewState:

private string ImagePath { get { return ViewState["ImageUrl"].ToString(); } }
0 голосов
/ 12 мая 2011

рассмотрите возможность использования "~ / images / sample1.jpg" для вашего источника.«~» заменяется именем приложения в вызове Server.MapPath

0 голосов
/ 12 мая 2011

Попробуйте вместо этого относительный путь:

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