在有人上传图片之前,我已将这些代码作为验证。然而,当我尝试上传视频文件等不同的文件时,它仍在推进?我在这里失踪了什么?这是我的全部代码。我不确定你在找什么对不起。它只接受我尝试上传的所有内容,并上传但没有图像。
protected void Page_Load(object sender, EventArgs e)
{
if (Session["IslandGasAdminPM"] != null)
{
if (!IsPostBack)
{
GetCategories();
AddSubmitEvent();
}
if (Request.QueryString["alert"] == "success")
{
Response.Write("<script>alert('Record saved successfully')</script>");
}
}
else
{
Response.Redirect("LogIn.aspx");
}
}
private void AddSubmitEvent()
{
UpdatePanel updatePanel = Page.Master.FindControl("AdminUpdatePanel") as UpdatePanel;
UpdatePanelControlTrigger trigger = new PostBackTrigger();
trigger.ControlID = btnSubmit.UniqueID;
updatePanel.Triggers.Add(trigger);
}
private void GetCategories()
{
ShoppingCart k = new ShoppingCart();
DataTable dt = k.GetCategories();
if (dt.Rows.Count > 0)
{
ddlCategory.DataValueField = "CategoryID";
ddlCategory.DataTextField = "CategoryName";
ddlCategory.DataSource = dt;
ddlCategory.DataBind();
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (uploadProductPhoto.PostedFile != null)
{
SaveProductPhoto();
ShoppingCart k = new ShoppingCart()
{
ProductName = txtProductName.Text,
ProductImage = "~/ProductImages/" + uploadProductPhoto.FileName,
ProductPrice = txtProductPrice.Text,
ProductDescription = txtProductDescription.Text,
CategoryID = Convert.ToInt32(ddlCategory.SelectedValue),
TotalProducts = Convert.ToInt32(txtProductQuantity.Text)
};
k.AddNewProduct();
ClearText();
Response.Redirect("/Admin/AddNewProduct.aspx?alert=success");
}
else
{
Response.Write("<script>alert('Please upload photo');</script>");
}
}
private void ClearText()
{
uploadProductPhoto = null;
txtProductName.Text = String.Empty;
txtProductPrice.Text = String.Empty;
txtProductDescription.Text = String.Empty;
txtProductQuantity.Text = String.Empty;
}
private void SaveProductPhoto()
{
if (uploadProductPhoto.PostedFile != null)
{
string filename = uploadProductPhoto.PostedFile.FileName.ToString();
string fileExt = System.IO.Path.GetExtension(uploadProductPhoto.FileName);
//check filename length
if (filename.Length > 96)
{
Response.Write("Image should not exceed 96 characters");
}
//check file type
else if (fileExt != ".jpg" && fileExt != ".jpeg" && fileExt != ".png" && fileExt != ".bmp")
{
Response.Write("Only jpg,jpeg,bmp and png are allowed");
}
//check file size
else if (uploadProductPhoto.PostedFile.ContentLength > 4000000)
{
Response.Write("Image should not exceed 4MB");
}
//Save images to folder
else
{
uploadProductPhoto.SaveAs(Server.MapPath("~/ProductImages/" + filename));
}
}
答案 0 :(得分:0)
您似乎正在创建变量'filename',然后在尝试获取扩展时不在下一行中使用它。我不知道你正在做什么的细节,但这对我来说是一个直接的红旗,可能会参与其中。
如果您可以提供'filename'和'uploadProductPhoto.FileName'值的一些示例,那么我将能够帮助您了解正在发生的事情。
答案 1 :(得分:0)
使用正则表达式验证控件,视频格式的表达式为:
Intent action = new Intent(Intent.ACTION_GET_CONTENT);
action.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(action, "Upload file from..."),Constants.FILE_CHOOSER_REQUEST_CODE );
验证音频文件格式的正则表达式是:
ValidationExpression=/^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))+(.avi|.AVI|.WMV|.wmv|.wav|.WAV|.mpg|.MPG|.mid|.MID|.asf|.ASF|.mpeg|.MPEG)$/
编辑:验证图像文件格式的正则表达式为:
ValidationExpression=/^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))+(.mp3|.MP3|.mpeg|.MPEG|.m3u|.M3U)$/
和
ValidationExpression=/^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))+(.jpeg|.JPEG|.gif|.GIF|.png|.PNG|.JPG|.jpg|.bitmap|.BITMAP)$/
有关完整文章,请参阅this链接。
答案 2 :(得分:0)
因为SaveProductPhoto
在检查失败时没有抛出异常,有两种方法可以避免您的问题:
Response.End()
代码Response.Write
醇>
另外,验证文件ext不是一个好主意,你可以验证InputStream,读取前两个字节,并检查它们
//byte[] bytes = new byte[2];
//string.Format("{0}{1}",bytes[0],bytes[1])
//255216 is jpg;7173 is gif;6677 is BMP,13780 is PNG;7790 is exe,8297 is rar
答案 3 :(得分:0)
使用正则表达式进行解决。这是表达方式。
ValidationExpression="^.*\.(jpg|JPG|gif|GIF|doc|DOC|pdf|PDF|PNG|png)$"