Server.mappath lance une erreur lors de l'utilisation de la bibliothèque de recadrage d'image Web

StackOverflow https://stackoverflow.com/questions/5977200

Question

J'ai une image stockée sur le serveur à l'emplacement:

C:\inetpub\wwwroot\imageupload\images

Dans mon code, je veux utiliser une image à partir d'images de dossier, donc j'essaie comme suit:

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

Mais j'obtiens l'erreur comme:enter image description here

S'il vous plaît, aidez-moi à résoudre l'erreur

Comme sur plusieurs réponses demandant à publier le code, c'est comme ça suivant

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

La méthode de recadrage provient d'un fichier .dll que j'ai utilisé http://imagecropping.codeplex.com/

Était-ce utile?

La solution

Une erreur est dans le CSA.Web.UI.CropImage.Crop Méthode, comme décrit par la trace de pile.

Server.MapPath, à ma connaissance, ne renverra pas de chaîne nulle (elle lancera une exception si elle ne peut pas mapper - mais pas un NullReferenceException).

Je vous suggère de examiner la méthode que je mentionne et éventuellement de publier le code pertinent également.

ÉDITER:

Alors, j'ai jeté un coup d'œil Crop coder de Le projet Codeplex Vous mentionnez et avez trouvé les lignes suivantes (mise en forme de la mine):

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

Maintenant, il me semble que:

  • Dispute Path est non nulle*
  • Dispute ImageUrl est nul**

* Bien que cela puisse être «incorrect», ce n'est pas le problème pour le moment.

** Cela signifie l'appel ToString est le facteur de rupture de ce code.

Fondamentalement, le contrôle n'a pas d'image définie pour recadrer et cela est évident dans votre propre code:

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

Le correctif consiste à spécifier une image via ImageUrl, Afaik, mais je ne vois pas comment le faire.

Autres conseils

Vous avez stocké vos images imageupload\images Mais quand vous avez essayé de les attraper, vous avez oublié d'ajouter le imageupload annuaire:

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

Essayez plutôt un chemin relatif:

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

Envisagez d'utiliser "~ / images / exemple1.jpg" pour votre source. Le "~" est remplacé par le nom de l'application dans l'appel à server.mappath

Selon:https://webcropimage.svn.codeplex.com/svn/trunk/cs.webcontrols/webcropimage/cropimage.cs

Méthode culte (), donne un chemin où enregistrer L'image recadrée.

Quelle image doit être recadrée est stockée dans wci1.imagepath

Veuillez vérifier si cette valeur est nul, et cela devrait souligner le problème.

Comme il n'y a pas <Form runat="Server">, peut-être qu'il ne peut pas accéder au Viewstate:

private string ImagePath { get { return ViewState["ImageUrl"].ToString(); } }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top