我有一个名为images的mysql表,包含MultipleImageID,MultipleImageName,MultipleImageMap和PropertyID(外键)。我遇到的问题是,当我上传它们时,实际上图像似乎重复但是列中填充了正确的信息。这是一张更好解释的图片。
正如您所看到的,图像名称都不同,因为每个图像应该不同,但选择的第一个图像似乎会多次上传。其他时候会上传正确的图片,这让我感到很困惑。我的代码也没有错误。
这是我上传的c#。
protected void Insert(object sender, EventArgs e)
{
string PropertyName = txtName.Text;
string PropertyFeatures = txtPropFeat.Text;
string PropertyLocation = txtPropLoc.Text;
string PropertyInformation = txtPropInfo.Text;
string PropertyNumBeds = txtNumBeds.Text;
string PropertyPrice = txtPrice.Text;
string PropertyType = txtPropType.Text;
long InsertedID;
string constr = ConfigurationManager.ConnectionStrings["realestatedbAddConString"].ConnectionString;
using (MySqlConnection con = new MySqlConnection(constr))
{
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO property (PropertyName, PropertyNumBeds, PropertyType, PropertyPrice, PropertyFeatures, PropertyLocation, PropertyInformation, ImageName, ImageMap) VALUES (@PropertyName, @PropertyNumBeds, @PropertyType, @PropertyPrice, @PropertyFeatures, @PropertyLocation, @PropertyInformation, @ImageName, @ImageMap)"))
{
using (MySqlDataAdapter sda = new MySqlDataAdapter())
{
cmd.Parameters.AddWithValue("@PropertyName", PropertyName);
cmd.Parameters.AddWithValue("@PropertyNumBeds", PropertyNumBeds);
cmd.Parameters.AddWithValue("@PropertyPrice", PropertyPrice);
cmd.Parameters.AddWithValue("@PropertyType", PropertyType);
cmd.Parameters.AddWithValue("@PropertyFeatures", PropertyFeatures);
cmd.Parameters.AddWithValue("@PropertyLocation", PropertyLocation);
cmd.Parameters.AddWithValue("@PropertyInformation", PropertyInformation);
string FileName = Path.GetFileName(MainImageUploada.FileName);
MainImageUploada.SaveAs(Server.MapPath("ImagesUploaded/") + FileName);
cmd.Parameters.AddWithValue("@ImageName", FileName);
cmd.Parameters.AddWithValue("@ImageMap", "ImagesUploaded/" + FileName);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
InsertedID = cmd.LastInsertedId;
con.Close();
}
}
}
if (ImageUploada.HasFiles)
{
foreach (var file in ImageUploada.PostedFiles)
{
string FileName1 = Path.GetFileName(ImageUploada.FileName);
ImageUploada.SaveAs(Server.MapPath("ImagesUploaded/") + file.FileName);
using (MySqlConnection con = new MySqlConnection(constr))
{
using (MySqlCommand cmd = new MySqlCommand("INSERT INTO propertyimage(MultipleImageName, MultipleImageMap, PropertyID) VALUES (@MultipleImageName, @MultipleImageMap, @InsertedID); "))
{
using (MySqlDataAdapter sda = new MySqlDataAdapter())
{
cmd.Parameters.AddWithValue("@MultipleImageName", file.FileName);
cmd.Parameters.AddWithValue("@MultipleImageMap", "ImagesUploaded/" + file.FileName);
cmd.Parameters.AddWithValue("@InsertedID", InsertedID);
cmd.Connection = con;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
}
}
txtName.Text = "";
txtPropFeat.Text = "";
txtPropInfo.Text = "";
txtPropLoc.Text = "";
txtNumBeds.Text = "";
txtPrice.Text = "";
txtPropType.Text = "";
Label1.Visible = true;
Label1.Text = "Property Added to Database Successfully!";
}
我迷失了我的代码,数据库或我正在使用的图像。
答案 0 :(得分:1)
你正在循环ImageUploada.PostedFiles
,但是你忽略了这一点并调用ImageUploada
本身的方法,这只会处理第一个文件。
因此,如果您上传多个文件,则保存在服务器上的所有文件都将是第一个文件的副本。
您需要更改代码以单独处理每个file
:
foreach (var file in ImageUploada.PostedFiles)
{
string FileName1 = Path.GetFileName(file.FileName);
file.SaveAs(Server.MapPath("ImagesUploaded/") + file.FileName);
// ...
}