Server.Mappath getta errore quando si utilizza la libreria di ritaglio dell'immagine Web
-
12-11-2019 - |
Domanda
Ho un'immagine memorizzata sul server in posizione:
C:\inetpub\wwwroot\imageupload\images
.
Nel mio codice voglio utilizzare un'immagine da immagini di cartelle, quindi sto provando come segue:
Server.MapPath("/images/sample1.jpg")
.
Ma ottengo l'errore come:
Aiutami a risolvere l'errore
Come su diverse risposte che chiedono di pubblicare il codice, è come segue
.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);
}
}
Metodo di coltura è da un file .dll che ho usato da http://imagecropping.codeplex.com/
Soluzione
L'errore è nel metodo CSA.Web.UI.CropImage.Crop
, come descritto dalla traccia dello stack.
Server.MapPath
, a mia conoscenza, non restituirà una stringa nulla (lancerà un'eccezione se non può mappare - ma non un NullReferenceException
).
Ti suggerirei di guardare nel metodo che ho menzionato e possibilmente pubblicare anche il codice pertinente.
Modifica:
Allora, ho avuto un rapido sguardo al codice Crop
da Il progetto Codeplex Si menziona e ha trovato le seguenti righe (formattazione miniera):
.
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);
Altri suggerimenti
Hai memorizzato le tue immagini in imageupload\images
ma quando hai provato a afferrarli, hai dimenticato di aggiungere la directory imageupload
:
Server.MapPath("/imageupload/images/sample1.jpg")
. prova invece un percorso relativo:
Server.MapPath("images/sample1.jpg")
. Considera l'utilizzo di "~ / Immagini / sample1.jpg" per la tua fonte."~" è sostituito dal nome dell'applicazione nella chiamata a server.mappath
Secondo: https://webcropimage.svn.codeplex.com/svn/trunk/cs.webcontrols/webcropimage/cropimage.cs
Metodo Crop (), dà un percorso dove Salva L'immagine ritagliata.
Quale immagine deve essere ritagliata in wci1.imagepath
Si prega di verificare se questo valore è null , e questo dovrebbe indicare il problema.
Poiché non esiste <Form runat="Server">
, forse non può accedere al lievestate:
.private string ImagePath { get { return ViewState["ImageUrl"].ToString(); } }