الخادم.ماباث يلقي خطأ عند استخدام مكتبة اقتصاص صورة الويب
-
12-11-2019 - |
سؤال
لدي صورة مخزنة على الخادم في الموقع:
C:\inetpub\wwwroot\imageupload\images
في التعليمات البرمجية الخاصة بي أريد استخدام صورة من صور المجلد لذلك أحاول على النحو التالي:
Server.MapPath("/images/sample1.jpg")
ولكن أنا على الحصول على الخطأ كما:
الرجاء مساعدتي في حل الخطأ
كما هو الحال في العديد من الإجابات التي تطلب نشر الرمز ، فهي كما يلي
.اسبكس
<%@ 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>
.اسبكس.جيم
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/
المحلول
هناك خطأ في CSA.Web.UI.CropImage.Crop
الطريقة كما هو موضح في تتبع المكدس.
Server.MapPath
, ، على حد علمي، لن يُرجع سلسلة فارغة (سيؤدي إلى استثناء إذا لم يتمكن من التعيين - ولكن ليس NullReferenceException
).
أقترح عليك النظر في الطريقة التي ذكرتها وربما نشر الكود ذي الصلة أيضًا.
يحرر:
لذلك، ألقيت نظرة سريعة على 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"));
الإصلاح هو تحديد صورة عبر ImageUrl
, ، AFAIK، ولكن لا أستطيع أن أرى كيفية القيام بذلك.
نصائح أخرى
لقد قمت بتخزين الصور الخاصة بك في imageupload\images
ولكن عندما حاولت الاستيلاء عليها كنت قد نسيت أن تضيف في imageupload
الدليل:
Server.MapPath("/imageupload/images/sample1.jpg")
جرب مسارا نسبيا بدلا من ذلك: giveacodicetagpre.
النظر في استخدام "~ / images / sample1.jpg" لمصدرك.يتم استبدال "~" بحلول اسم التطبيق في المكالمة إلى server.mappath
وفقا:https://webcropimage.svn.codeplex.com/svn/trunk/CS.WebControls/WebCropImage/CropImage.cs
طريقة المحاصيل () ، ويعطي المسار حيث أن حفظ اقتصاص الصورة.
الصورة التي ينبغي أن يكون اقتصاص يتم تخزينها في wci1.ImagePath
يرجى التحقق إذا كانت هذه القيمة null, هذا وينبغي أن نشير إلى المشكلة.
حيث لا يوجد <Form runat="Server">
, ربما لا يمكن الوصول إلى ViewState:
private string ImagePath { get { return ViewState["ImageUrl"].ToString(); } }