PDA

View Full Version : جلوگیری از آپلود فایل بانام تکراری



h.alizadeh
پنج شنبه 17 آبان 1386, 18:53 عصر
سلام،

من یک برنامه برای آپلود فایل نوشتم اینطوری:

<form runat="server">
Select a file to upload:
<input type="file" id="fileControl" runat="server"><br>
Save as: (Just the name only please):
<input id="txtTargetName" readonly="true" type="text" runat="server"><br>
<input type=button id="btnLoad" value="Upload"
OnServerClick="btnLoad_Click" runat="server"><br>
<span id=span1 runat="server" /><br>
<asp:Label ID="t" runat="server"/>
</form></html>
<script language="VB" runat="server">
dim t3 as string
dim t2,t1 as integer
Sub btnLoad_Click(s As Object, e As EventArgs)
If txtTargetName.Value="" Then
span1.InnerHtml="Error: you must enter a file name"
Return
End If
If Not (fileControl.PostedFile Is Nothing) Then
Try
fileControl.PostedFile.SaveAs(("G:\homaaaa\" + txtTargetName.Value))
Catch err As Exception
span1.InnerHtml="Error saving file <b>G:\homaaaa\" + _
txtTargetName.Value & "</b><br>" & err.ToString()
End Try
End If
End Sub
</script>


من توی برنامه م اسم و پسوند فایل موردنظر رو از کاربر می گیرم . بعد در آدرسG:\homaaaa\ آپلودش می کنم .

مشکل من اینجای که اگر کاربر فایلی با نام وپسوندی رو بخواد آپلود کنه که در آدرسG:\homaaaa\ وجود داشته باشه باعث میشه این فایل جدید روی اون فایل قبلی ریخته بشه و فایل قبلی از بین بره...
مثلا یک کاربر فایل عکس رو با نامme.jpg آپلود میکنه حالا چند روز دیگه یک فایل عکس دیگه با همین نام و پسوند رو مییاد آپلود کنه ؛ این باعث میشه فایل جدید روی قبلی ریخته بشه.....

که این خیلی بدهست... من میخوام اگر فایلی با این نامه و پسوند در آدرس G:\homaaaa\وجود داشت به کاربر پیام خطا بده و بگه اسم فایل رو عوض کن..

چطور میتونه اینکار رو بکنم؟؟؟؟؟؟؟؟؟؟؟؟

hamedgh
پنج شنبه 17 آبان 1386, 19:14 عصر
لازم نیست به طرف پیام خطا بدهید اسم فایل را خودتان تغییر دهید و در بانک ذخیره کنید و اگر فایل را خواستید با اسم و آدرس آن را از بانک بخوانید بدون هیچ مشکلی

peymannaji
جمعه 18 آبان 1386, 21:40 عصر
سلام دوست عزیز
ببینید بهتزین راه که خودم استفاده میکنم برای اینکه اسامی تکراری نشه استفاده از ماه سال روز ساعت دقیقه ثانیه و اگه خیلی حسایت نشون بدم صدم ثانیه رو بصورت ترکیبی برای نام فایل در نظر بگیرید ... البته راه دیگه ای هم شاید باشه اما من همین روش رو استفاده میکنم ... موفق باشید ...

shahab_ksh
شنبه 19 آبان 1386, 00:18 صبح
از ترکیب اعداد تصادفی و کلید اصلی جدول تون هم میتونید در انتهای نام فایل استفاده کنید

mahdi_farhani
شنبه 19 آبان 1386, 20:25 عصر
میتونی از FileExist استفاده کنی و اگر وجود داشت بیاد با هر فرمولی که دوست داری فایل اسمشو عوض کن ولی باید دوباره چک کنی که این اسمی که درست کردی ترکاری نباشه .

merlin_vista
شنبه 19 آبان 1386, 20:59 عصر
آقا این کد را من چند وقت پیش واسه آپلود عکس نوشتم که اگه فایل را اسمش را تغییر میده به گونه ای که تکراری هیچ وقت نشه :

//آپلود عکس
if (this.PicFile.PostedFile.ContentLength > 300 * 150)
{
this.lblmaseg.Text = "";
this.lbleror.Text = "";
this.lbleror.Text = " تصویر بزرگ است باید اندازه آن برابر 150*300 باشد";
return;
}
if (this.PicFile.PostedFile.FileName == "")
{
this.lblmaseg.Text = "";
this.lbleror.Text = "";
this.lbleror.Text = "عکس انتخاب نشده است";
return;
}
string fn = this.PicFile.PostedFile.FileName;
System.IO.FileInfo FIr = new System.IO.FileInfo(fn);

if (FIr.Extension.ToLower() != ".jpg")
{
this.lblmaseg.Text = "";
this.lbleror.Text = "";
this.lbleror.Text = "فرمت فایل باید JPG باشد";
return;
}
string pio = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString();
string FileName = this.PicFile.PostedFile.FileName + pio + ".jpg";
System.IO.FileInfo FI = new System.IO.FileInfo(FileName);
string Path = this.Request.PhysicalApplicationPath;

System.IO.FileStream FS = new System.IO.FileStream(Path + "userpic\\" + FI.Name, System.IO.FileMode.Create);
System.IO.Stream St = this.PicFile.PostedFile.InputStream;

byte[] b = new byte[St.Length];

St.Read(b, 0, b.Length);
FS.Write(b, 0, b.Length);

St.Close();
FS.Close();

//
این کد آپلود عکس است و شما میتونید از قسمت تغییر نام آن برای جلوگیری از آپلود فایل با نام تکراری استفاده کنید .

Neo Persian
شنبه 19 آبان 1386, 23:47 عصر
این متود هم میتونه کمکتون کنه! با هر lenght یی که بخواین براتون string رندوم تولید میکنه


public string getRandomKey(int bytelength)
{
byte[] buff = new byte[bytelength];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(buff);
StringBuilder sb = new StringBuilder(bytelength);
for (int i = 0; i < buff.Length; i++)
sb.Append(string.Format("{0:X2}", buff[i]));
return sb.ToString();
}

abadanboy
یک شنبه 20 آبان 1386, 13:00 عصر
http://barnamenevis.org/forum/showthread.php?t=84127

h.alizadeh
دوشنبه 21 آبان 1386, 07:51 صبح
میتونی از FileExist استفاده کنی و اگر وجود داشت بیاد با هر فرمولی که دوست داری فایل اسمشو عوض کن ولی باید دوباره چک کنی که این اسمی که درست کردی ترکاری نباشه .

فایلFileExist توی asp.net1.1 هست؟؟