om56 Ответов: 3

Проблемы управления fileupload PostedFile


у меня есть страница регистрации, на которой я даю возможность пользователю загрузить изображение

пользователь tablename

Идентификатор инт
Электронная почта varchar(500)
Пароль varchar(500)
Имя варчар(500)
Страна варчар(500)
LastLogin datetime
RegisterDate datetime
Описание Varchar(500)
ImageName varchar(500) разрешить нули

когда я загрузить изображение изображение правильно загружен, но не установлен валидатор, чтобы контролировать загрузить изображение разрешить значения NULL в столбец имя_образа
когда пользователь не загружает изображение приходит ошибка

StartIndex не может быть меньше нуля.

код здесь

protected void Button1_Click(object sender, EventArgs e)
    {
        string chkUser = "Select * FROM [User] where Email='" + TextBox2.Text + "'";
        dt = dbClass.ConnectDataBaseReturnDT(chkUser);
        if (dt.Rows.Count > 0)
        {
            Response.Write("<script language='javascript'>alert( 'Already Exsist ' )</script>");
        }
        else
        {
            if (UploadUserPhoto.PostedFile != null)
            {
                string myMap = MapPath("~/").ToLower();
                Random r = new Random();
                int next = r.Next();
                string ImageName = UploadUserPhoto.PostedFile.FileName;
                // ToSaveImageName = DateTime.Now.ToString("yyyy-MM-ddTmm:hh:ss");
                //ToSaveImageName.Replace('-', '1');
                //ToSaveImageName.Replace(':', '2');
                //Directory.CreateDirectory(myMap + ToSaveImageName);


                sImageFileExtension = ImageName.Substring(ImageName.LastIndexOf(".")).ToLower();//error is here when i not upload the image 

                if (sImageFileExtension == ".gif" || sImageFileExtension == ".png" || sImageFileExtension == ".jpg" || sImageFileExtension == ".jpeg" || sImageFileExtension == ".bmp")
                {
                    string ImageSaveURL = myMap + "UserImage/" + next + sImageFileExtension;

                    try
                    {
                        UploadUserPhoto.PostedFile.SaveAs(ImageSaveURL);
                        string RegisterQuery = "INSERT INTO [User] (Email,Password,Name,Country,Gender,Month,Date,Year,Description,ImageName) VALUES('" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + DropDownList1.Text + "','" + DropDownList3.Text + "','" + DropDownList2.Text + "','" + DropDownList4.Text + "','" + TextBox1.Text + "','" + next + sImageFileExtension + "')";
                        dbClass.ConnectDataBaseToInsert(RegisterQuery);
                        Response.Redirect("~/Login.aspx");
                    }
                    catch (Exception ex)
                    {

                    }
                }

                else
                {

                }

            }


            else
            {
                ToSaveImageName = "No";
                sImageFileExtension = "Image";
            }
        }


[edit] опция"игнорировать HTML..." отключена, "ошибка в коде................" заменен на более описательный предмет - OriginalGriff[/edit]

Ed Nutting

Если ImageName был пустым, потому что не было никакой загрузки файла, то ImageName.LastIndexOf(".") будет равен -1, так как для него не будет индекса. Поэтому ImageName.Substring(-1) должен выдавать ошибку, потому что у вас не может быть подстроки из индекса -1! :P

Edit: вероятно, вам следует проверить не только UploadUserPhoto.HasFile, но также и то, является ли имя файла пустым, просто чтобы убедиться, что вы не получаете ошибок.

3 Ответов

Рейтинг:
1

Prasanta_Prince

Загрузка и выгрузка файлов в ASP.NET[^]

Может быть, это вам поможет.


Рейтинг:
1

Member 12353470

string ImageSaveURL = myMap + "UserImage/" + next + sImageFileExtension;

                   try
                   {
                       UploadUserPhoto.PostedFile.SaveAs(ImageSaveURL);
                       string RegisterQuery = "INSERT INTO [User] (Email,Password,Name,Country,Gender,Month,Date,Year,Description,ImageName) VALUES('" + TextBox2.Text + "','" + TextBox3.Text + "','" + TextBox4.Text + "','" + TextBox5.Text + "','" + DropDownList1.Text + "','" + DropDownList3.Text + "','" + DropDownList2.Text + "','" + DropDownList4.Text + "','" + TextBox1.Text + "','" + next + sImageFileExtension + "')";



В этом случае вам нужно было сделать строку вроде ImageSaveURL,, но загрузить ее расширение файла в базу данных ,как это работает!!!!!

Давай просто поменяемся
sImageFileExtension
к ImageSaveURL

DropDownList4.Text + "','" + TextBox1.Text + "','" + next + ImageSaveURL+ "')";

Как И Выше.


Richard MacCutchan

На семь лет опоздал.

Рейтинг:
0

OriginalGriff

Вместо проверки

if (UploadUserPhoto.PostedFile != null)

Попробуйте использовать
if (UploadUserPhoto.HasFile)
Вместо.

MSDN[^]


"линия полезна, когда я загружаю изображение, но я также объясняю на своей странице регистрации, что я даю пользователю возможность загружать изображение или нет."


Нет, это не так.
if (UploadUserPhoto.PostedFile != null)
всегда будет выполнять следующий оператор, потому что FileUpload.PostedFile никогда не является нулевым, независимо от того, загрузил ли пользователь файл или нет, поэтому if условие не выполняется
if (true)
С другой стороны,
if (UploadUserPhoto.HasFile)
Это будет верно только в том случае, если пользователь успешно загрузил файл, и поэтому имя файла доступно.


Ed Nutting

Мой 4. Правда, хотя некоторые объяснения относительно того, почему он (вероятно) получил ошибку на линии, которую он сделал, были бы полезны. Пожалуйста, смотрите мой комментарий, который содержит указанное объяснение.

[no name]

строка полезна, когда я загружаю изображение, но я также объясняю на своей странице регистрации, что я даю пользователю возможность загружать изображение или нет.

Ed Nutting

Я не понимаю, что ты пытаешься сказать? Если вы дали пользователю эту опцию, то, конечно же, вы уже знаете, если ваш epxecting файл или нет, так что не должно быть проблем..?

OriginalGriff

Ответ обновлен

Sandeep Mewara

Разве мы не видим этот вопрос снова? У меня есть смутное воспоминание о том, как я отвечал на подобный вопрос.