Вставить изображение в папку в веб-методе - PullRequest
0 голосов
/ 06 октября 2018

В рамках моего веб-метода я пытаюсь сохранить изображение в папку.Имя папки находится в корне и называется «images».В веб-методе я нахожу загрузочный файл моего HTML-элемента управления и пытаюсь сохранить изображение, но оно продолжает выдавать следующую ошибку:

System.NullReferenceException: 'Object reference not set to an instance of an object.'
fuClubLogo was null.

Я не понимаю, почему он возвращает ноль.

Здесьмой код

HTML

<asp:FileUpload ID="fuClubLogo" class="form-control" runat="server" />

<asp:Button ID="btnSaveClub" class="itg-btn news-btn" runat="server" Text="Save"/>

C #

[System.Web.Services.WebMethod]
public static string SaveUpdateClub(string ClubName, string Email, string Password, string ClubLogoName)
{
    string result = string.Empty;
        SqlConnection con = new SqlConnection(
        WebConfigurationManager.ConnectionStrings["MyDbConn"].ConnectionString);
        con.Open();
        SqlCommand cmd = new SqlCommand("select * from [dbo].[tb_ClubDetails] where ClubID = @ClubID", con);
        cmd.Parameters.AddWithValue("@ClubID", ClubName);
        SqlDataReader dr = cmd.ExecuteReader();
        if (dr.HasRows)
        {
            result = "A club with this name already exists.";
            con.Close();
            dr.Close();
        }
        else
        {
        //Here I make an attempt to save the image to a folder
            Page page = HttpContext.Current.Handler as Page;
            FileUpload fuClubLogo = (FileUpload)page.FindControl("fuClubLogo");

            string imgFile = Path.GetFileName(fuClubLogo.PostedFile.FileName);
            fuClubLogo.PostedFile.SaveAs(HttpContext.Current.Server.MapPath("/images/") + imgFile);

            SqlConnection con2 = new SqlConnection(
            WebConfigurationManager.ConnectionStrings["MyDbConn"].ConnectionString);
            con2.Open();
            SqlCommand cmd2 = new SqlCommand("sp_insertupdateClub", con2);
            cmd2.CommandType = System.Data.CommandType.StoredProcedure;
            cmd2.Parameters.AddWithValue("@ClubID", "");
            cmd2.Parameters.AddWithValue("@ClubName", ClubName);
            cmd2.Parameters.AddWithValue("@ClubEmail", Email);
            cmd2.Parameters.AddWithValue("@ClubPassword", Password);
            cmd2.Parameters.AddWithValue("@ClubLogoImage", ClubLogoName);
            cmd2.Parameters.AddWithValue("@LogoImagePath", "/images/" + ClubLogoName);

            cmd2.ExecuteNonQuery();
            con2.Close();
            result = "The club details are saved.";
        }
        return result;
    }

AJAX

$(document).ready(function () {
    $("#btnSaveClub").click(function () {
        var ClubName = $("#txtClubName").val();
        var Email = $("#txtEmail").val();
        var Password = $("#txtPassword").val();
        var ClubLogoName = $("#fuClubLogo").val().split('\\').pop();



        $.ajax({
            type: "POST",
            url: "AddViewClub.aspx/SaveUpdateClub",
            data: "{'ClubName': '" + ClubName +
                "','Email': '" + Email +
                "','Password': '" + Password +
                "','ClubLogoName': '" + ClubLogoName + "'}",
            contentType: "application/json; charset=utf-8",
            cache: false,
            dataType: "json",
            success: function (response) {
                //document.getElementById("Label10").innerHTML = response.d;
                alert(response.d);
            }
        });
        return false;
    });
});

Я также попытался загрузить изображение в папкуиспользуя Ajax Jquery, но я не смог этого сделать, поэтому я пытаюсь сделать это с помощью веб-метода.

Пожалуйста, помогите и посоветуйте.Спасибо.

1 Ответ

0 голосов
/ 06 октября 2018

вы не можете получить доступ к элементам управления страницы в веб-сервисе.

1) создать обработчик загрузки файла, который будет возвращать имя файла.

public class FileUploadHandler : IHttpHandler
{

public void ProcessRequest(HttpContext context)
{
    if (context.Request.Files.Count > 0)
    {
        string filename = Guid.NewGuid().ToString() + ".jpg";
        HttpPostedFile file = context.Request.Files[0];
        string path = context.Server.MapPath("~/images/" + filename);
        file.SaveAs(path);

        context.Response.ContentType = "text/plain";
        context.Response.Write(filename);
    }

}

public bool IsReusable
{
    get
    {
        return false;
    }
}
}

2) обработчик загрузки вызовов, затем сохранить в базе данных

$(document).ready(function () {
$("#btnSaveClub").click(function () {
    UploadImage();
    return false;
});

var filename;
function UploadImage() {
    var fileUpload = $("#fuClubLogo").get(0);
    var files = fileUpload.files;

    var data = new FormData();
    for (var i = 0; i < files.length; i++) {
        data.append(files[i].name, files[i]);
    }

    $.ajax({
        url: "FileUploadHandler.ashx",
        type: "POST",
        data: data,
        contentType: false,
        processData: false,
        success: function (result) {
            filename = result;
            SaveToDb();
        },
        error: function (err) {
        }
    });
}

function SaveToDb() {
    var ClubName = $("#txtClubName").val();
    var Email = $("#txtEmail").val();
    var Password = $("#txtPassword").val();
    var ClubLogoName = filename;

    $.ajax({
        type: "POST",
        url: "AddViewClub.aspx/SaveUpdateClub",
        data: "{'ClubName': '" + ClubName +
            "','Email': '" + Email +
            "','Password': '" + Password +
            "','ClubLogoName': '" + ClubLogoName + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            //document.getElementById("Label10").innerHTML = response.d;
            alert(response.d);
        }
    });
}
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...