PDA

View Full Version : ایجاد فیلتر برای کنترل FileUpload



barbodsoft.com
یک شنبه 02 خرداد 1389, 10:46 صبح
سلام دوستان
لطفا دوستان توضیح بدن چطور می تونم برای کنترلFileUpload فیلتر ایجاد کنم. من می خوام بعضی از فرمت های تصویری قابل آپلود باشد.

اگه با یک مثال بفرمایید ممنون می شم.

PhoenixNet
یک شنبه 02 خرداد 1389, 11:04 صبح
سلام

مثل کنترل های ویندوز نمی تونی فیلتر کنی ولی وقتی فایل رو انتخاب کرد می تونی پیغام مناسب به کاربر بدی.

تو این مثال از RequiredFieldValidator استفاده شده. که فایل های تصویری رو تشخیص میده



<asp:FileUploadrunat="server"ID="upTest"/>
<asp:RequiredFieldValidatorID="valReq"runat="server"ControlToValidate="upTest"
ValidationGroup="up"ErrorMessage="REQUIRED<br />"/>
<asp:RegularExpressionValidatorrunat="server"ID="valUpTest"ControlToValidate="upTest"
ValidationGroup="up"ErrorMessage="Image Files Only (.jpg, .bmp, .png, .gif)"
ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF|.jpeg|.JPEG|.bmp|.BMP|.pn g|.PNG)$"/>

mohitlog
یک شنبه 02 خرداد 1389, 11:14 صبح
سلام

در همین زمینه ایا راهی داره که وقتی فایل اپلود باز میشه all file(**) دیده نشه؟

barbodsoft.com
یک شنبه 02 خرداد 1389, 12:44 عصر
سلام دوست عزیز
نمی دونم چرا کدی که نوشتم فقط فایل jpg رو آپلود می کنه. اگه می شه به این کدها یک نگاه بندازید ببینید اشکال از کجاست؟

این کد asp


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="AddPicture.aspx.vb" Inherits="AddPicture" %>
<!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>
<link rel="Stylesheet" href="MyCSS.css"/>
</head>
<body>
<form id="form1" runat="server">
<div dir="ltr" align ="right" >

<asp:Label ID="Label1" runat="server" Text="Select picture to add :"></asp:Label>

<asp:FileUpload ID="upTest" runat="server"/>
<asp:RequiredFieldValidator ID="valReq" runat="server" ControlToValidate="upTest"
ValidationGroup="up" ErrorMessage="REQUIRED <br />"/>
<asp:RegularExpressionValidator runat="server" ID="valUpTest" ControlToValidate="upTest"
ValidationGroup="up" ErrorMessage=" jpg,gif,jpeg,bmp,png "
ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF|.jpeg|.JPEG|.bmp|.BMP|.pn g|.PNG)$"/>

<br />
<br />
<asp:Label ID="Label2" runat="server"
Text=" "></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" Width="214px"></asp:TextBox>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="" Width="99px" />
<br />
<br />
<br />
<asp:Label ID="LblCompleted" runat="server" Text=" "
Visible="False"></asp:Label>
<br />
<asp:Label ID="LblFailed" runat="server" Text=" " Visible="False"></asp:Label>
<br />
<br />
<br />
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Picture.aspx">Go to
Pictures</asp:HyperLink>

</div>
</form>
</body>
</html>


اینم کد Vb


Imports System.IO
Imports System.Drawing

Partial Class AddPicture
Inherits System.Web.UI.Page
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim str As String = LCase(Mid(upTest.FileName, Len(upTest.FileName) - 2))
Dim StrFileName As String = DateAndTime.Now.Ticks.ToString
upTest.SaveAs(Server.MapPath("Picture/Originals/" & StrFileName & "." & str))
File.WriteAllText(Server.MapPath("Picture/Originals/" & StrFileName & ".txt"), TextBox1.Text, System.Text.Encoding.UTF8)
Dim MyThumbPic As Bitmap
MyThumbPic = Image.FromFile(Server.MapPath("Picture/Originals/" & StrFileName & "." & str))
ResizePicture(MyThumbPic, New Size(60, 40)).Save(Server.MapPath("Picture/Thumbs/" & StrFileName & "." & str))
LblCompleted.Visible = True
LblFailed.Visible = False
End Sub
Public Function ResizePicture(ByVal sourceImage As Bitmap, ByVal newSize As Size) As Bitmap
Dim Result_image As New Bitmap(sourceImage, newSize.Width, newSize.Height)
Dim Gr As Graphics
Gr = Graphics.FromImage(Result_image)
Gr.DrawImage(Result_image, 0, 0, newSize.Width, newSize.Height)
Gr.Save()
Return Result_image
End Function
End Class


ممنون که وقت می زارید.

mohitlog
یک شنبه 02 خرداد 1389, 12:53 عصر
سلام

کسی جواب ما رو نداد

barbodsoft.com
یک شنبه 02 خرداد 1389, 13:39 عصر
سلام

کسی جواب ما رو نداد


چی دیده نشه؟ سوالت مبهم هست.

maxpayn2
یک شنبه 02 خرداد 1389, 14:10 عصر
سلام

مثل کنترل های ویندوز نمی تونی فیلتر کنی ولی وقتی فایل رو انتخاب کرد می تونی پیغام مناسب به کاربر بدی.

تو این مثال از RequiredFieldValidator استفاده شده. که فایل های تصویری رو تشخیص میده



<asp:FileUploadrunat="server"ID="upTest"/>
<asp:RequiredFieldValidatorID="valReq"runat="server"ControlToValidate="upTest"
ValidationGroup="up"ErrorMessage="REQUIRED<br />"/>
<asp:RegularExpressionValidatorrunat="server"ID="valUpTest"ControlToValidate="upTest"
ValidationGroup="up"ErrorMessage="Image Files Only (.jpg, .bmp, .png, .gif)"
ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF|.jpeg|.JPEG|.bmp|.BMP|.pn g|.PNG)$"/>


فکر کنم تو این روش فقط پسوند رو چک میکنه و اگه فایلی که با پسوند jpg آپ میشه محتویاتش واقعا jpg نباشه ارسال میشه .

این کد رو خیلی وقت پیش نوشتم ، یه کم مبتدیه ولی میتونی ازش ایده بگیری




int fileMaxLength = System.Convert.ToInt32(System.Configuration.Config urationManager.AppSettings["ImageMaxFileLengh"]);
int fileMaxWidth = System.Convert.ToInt32(System.Configuration.Config urationManager.AppSettings["ImageMaxWidth"]);

Session["imagename"] = newsImageFileUpload.FileName;
String fileExtension = System.IO.Path.GetExtension(newsImageFileUpload.Fi leName).ToLower();
String[] allowedExtensions = { ".jpeg", ".jpg" };
System.Drawing.Bitmap oBitmap = new System.Drawing.Bitmap(newsImageFileUpload.PostedFi le.InputStream, true);
path = Server.MapPath("~/Pictures");

for (int i = 0; i < allowedExtensions.Length; i++)
{
if (fileExtension == allowedExtensions[i])
{
fileExt = true;
}
else
{
uploadErrorMessage = "فرمت فایل " + "jpg" + "یا" + "jpeg" + " نبوده و ارسال نشد";
lblMessage.Text = uploadErrorMessage;
lblMessage.Visible = true;
fileExt = false;
}
}

if (newsImageFileUpload.PostedFile.ContentType == "image/pjpeg")
{
fileType = true;
}
else
{
uploadErrorMessage = "فایل عکس نبوده و ارسال نشد";
lblMessage.Text = uploadErrorMessage;
lblMessage.Visible = true;
fileType = false;
}

if (newsImageFileUpload.PostedFile.ContentLength <= fileMaxLength * 1024)
{
fileLength = true;
}
else
{
uploadErrorMessage = "سایز عکس بیشتر از 50 کیلو بایت بوده و ارسال نشد";
lblMessage.Text = uploadErrorMessage;
lblMessage.Visible = true;
fileLength = false;
}

if (oBitmap.Width <= fileMaxWidth)
{
fileWidth = true;
}
else
{
uploadErrorMessage = "عرض عکس بیشتر از 90 پیکسل بوده و ارسال نشد";
lblMessage.Text = uploadErrorMessage;
lblMessage.Visible = true;
fileWidth = false;
}

try
{
cnn.ConnectionString = "Data Source=.;Database=tconet2;Integrated Security=SSPI";
cnn.Open();
SqlCommand cmd = new SqlCommand("select_imagename", cnn);
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.AddWithValue("@name", Session["imagename"].ToString());

SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read())
{
lblMessage.Text = "قبلا یک عکس با این نام ثبت شده است ، لطفا نام عکس را تغییر دهید";
lblMessage.Visible = true;
imageExis = false;
}
else
{
imageExis = true;
}

cnn.Close();
}
finally
{
cnn.Close();
}

barbodsoft.com
یک شنبه 02 خرداد 1389, 14:56 عصر
ممنون که وقت می زارید.
ببینید من یک این کدی که نوشتم فقط قادر هست فایل های با فرمت jpg رو ارسال کنه. این در حالی هست.
مثلا اگه من یک عکس با فرمت bmp رو انتخاب کنم. خطای Internet Explorer cannot display the webpage صادر می شه. ولی اگه فایل از نوع jpg باشه بدون هیچ مشکلی ارسال انجام خواهد شد.
نکته : من نمی خوام فقط jpg ارسال بشه. و اگر هم می بینید که در مورد فیلتر پرسیدم بخاطر این بود که فکر می کردم در مورد نحوه فیلتر کردن دارم اشتباه می کنم.

PhoenixNet
یک شنبه 02 خرداد 1389, 15:50 عصر
Internet Explorer cannot display the webpage اگه نشون میده شاید به خاطر حجم فایل باشه.چون سرور دیگه پاسخی ارسال نمی کنه.

barbodsoft.com
یک شنبه 02 خرداد 1389, 16:03 عصر
Internet Explorer cannot display the webpage اگه نشون میده شاید به خاطر حجم فایل باشه.چون سرور دیگه پاسخی ارسال نمی کنه.

فکر نمی کنم به این خاطر باشه. یعنی عکسهای هجیم تر رو نمی شه ارسال کرد. در ضمن اصلا کدی اجرا نمی شه و فقط همون Internet Explorer cannot display the webpage می یاد.

mohitlog
یک شنبه 02 خرداد 1389, 16:20 عصر
سلام

یک breakpoint بذار و برنامتو تریس کن ببین چه خطایی میده اونو بده بچه ها روش کار کنن.
هزاران خطا ممکنه رخ بده


کسی میدونه ایا امکان داره کاری کرد که all Files(*.*) اصلا نشون داده نشه و از reg ex استفاده نکنیم

مثل برنامه های ویندوزی؟

barbodsoft.com
یک شنبه 02 خرداد 1389, 17:19 عصر
سلام

یک breakpoint بذار و برنامتو تریس کن ببین چه خطایی میده اونو بده بچه ها روش کار کنن.
هزاران خطا ممکنه رخ بده


دوست عزیز همونطور که قبلا هم گفتم. هیچ کدی اجرا نمی شه. یعنی breakpoint در ابتدای رویداد کلیک دکمه ای که برای آپلود گذاشتم قرار دادم ولی بدون اینکه توقفی در اجرای برنامه به وجود بیاد به خطای Internet Explorer cannot display the webpage می رسه. هیچ کدی اجرا نمی شه که بخواهیم از breakpoint استفاده کنیم

behiunforgiven
دوشنبه 25 مرداد 1389, 22:42 عصر
سلام

یک breakpoint بذار و برنامتو تریس کن ببین چه خطایی میده اونو بده بچه ها روش کار کنن.
هزاران خطا ممکنه رخ بده


کسی میدونه ایا امکان داره کاری کرد که all Files(*.*) اصلا نشون داده نشه و از reg ex استفاده نکنیم

مثل برنامه های ویندوزی؟


دوستان کسی نیست جواب این سوال رو بده؟

darrudi
یک شنبه 31 مرداد 1389, 12:11 عصر
سلام دوستان بهترین راه برای این کار به نظر من این هستش که شما بیاین مثل مثال زیر عمل کنین



string test;
FileUpload1.SaveAs(Server.MapPath("Img_users") + "\\" + FileUpload1.FileName);
test = FileUpload1.PostedFile.ContentType;
if (test == "image/bmp" || test == "image/jpg" || test == "image/gif" || test == "image/pjpeg")
{