الخادم.ماباث يلقي خطأ عند استخدام مكتبة اقتصاص صورة الويب

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

سؤال

لدي صورة مخزنة على الخادم في الموقع:

C:\inetpub\wwwroot\imageupload\images

في التعليمات البرمجية الخاصة بي أريد استخدام صورة من صور المجلد لذلك أحاول على النحو التالي:

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

ولكن أنا على الحصول على الخطأ كما:enter image description here

الرجاء مساعدتي في حل الخطأ

كما هو الحال في العديد من الإجابات التي تطلب نشر الرمز ، فهي كما يلي

.اسبكس

<%@ 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(); } }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top