ورود

View Full Version : آموزش: دانلود کنید. کاملترین برنامه آپلود عکس که شامل ...



mehrzad_ali
پنج شنبه 19 اسفند 1389, 10:40 صبح
دانلود کنید. کاملترین برنامه آپلود عکس که شامل :


بررسی پسوند عکس
بررسی حجم عکس
ایجاد فولدر تاریخ همان روز
ایجاد نام تصادفی برای عکس
ایجاد thumbnails برای عکس
و ذخیره عکس روی هاست و خروجی string برای ذخیره آدرس عکس در دیتابیس

دوستان اگه قسمتی باید اضافه بشه توضیح بدهند
این برنامه با VS 2008 نوشته شده

67397

اوبالیت به بو
جمعه 20 اسفند 1389, 22:18 عصر
سلام

جناب یه 2 تا پیشنهاد دارم:

1) برای مقایسه حجم همه فایل ها همیشه بهتر هست که از طریق FileBytes چک بکنید. به خاطر اینکه اساسا تمام فایل ها آرایه ای از بایت ها هستند که به صورت بلاک بلاک برروی حافظه ذخیره شده اند. به همین خاطر پیشنهاد می کنم برای مقایسه حجم فایل ارسال شده از این دستور استفاده کنید:

//Check file size
if (FileUpload1.FileBytes.Length / 1024 >= 150)
{
lblMessage.Text = "اندازه حجم فایل باید کمتر از 150 کیلوبایت باشد";
return;
}}

2- در متد IsValidFileType شما آمده اید Extension فایل رو بررسی کردید. خوب فرض کنید من یک فایل Exe دارم اما میام با Extension مورد نظر شما یعنی مثلا jpeg ذخیره میکنم. بر اساس دستورات نوشته شده شما برنامه فایل من رو jpeg می شناسه و با موفقیت هم آپلود می کنه و شما هم فکر می کنید که برنامه درست کار می کنه. برای همین پینشهاد می کنم که دستورات رو تغییر بدید. در وب تمام فایل ها یک MIME Type دارند. اگر در گوگل جستجو کنید یک جدول برای شما نشون داده میشه از تمام MIME Type های مختلف که در وب به صورت استاندارد درومده. نوع هر فایل در Header اون فایل ذخیره میشه نه در FileName اون. شما FileName رو دریافت کردید و در آرایه ValideExtension هاتون یک شرط برای مقایسه گذاشتید. برای همین ابتدا شما هدر فایل رو بخونید و بعد مقایسه انجام بدید. دستورات رو به این صورت تغییر بدید بهتر هستش:


//Check File Extensions
string FileExtensions = FileUpload1.PostedFile.ContentType;
string[] ValidExtensions = { "image/pjpeg", "image/jpeg", "image/jpg", "image/gif" };
if (Array.IndexOf(ValidExtensions, FileExtensions) < 0)
{
lblMessage.Text = "پسوند های مجاز برای آپلود فایل jpeg و gif می باشند.";
return;
}


من برنامه شما رو اجرا نکردم اما شما در لیست امکانات اشاره کردید که فایل پس از آپلود یک خروجی در Label به کاربر نشون می ده تا بتونه اون آدرس رو کپی کنه و در جاهای مختلف ذخیره یا نمایش بده. در کد شما من ندیدم که متغیر message رو با SavePath یا SavePath2 مقدار دهی کرده باشید. اگر میشه این یه قسمت رو به من بگید.

mehdi-ghafari
شنبه 21 اسفند 1389, 02:16 صبح
من برنامه شما رو اجرا نکردم اما شما در لیست امکانات اشاره کردید که فایل پس از آپلود یک خروجی در Label به کاربر نشون می ده تا بتونه اون آدرس رو کپی کنه و در جاهای مختلف ذخیره یا نمایش بده. در کد شما من ندیدم که متغیر message رو با SavePath یا SavePath2 مقدار دهی کرده باشید. اگر میشه این یه قسمت رو به من بگید.

تو خط ۱۵۸ به صورت کامنت اوردن :


//insert into image(large,thumb)values(originalImagePath,thumbIm agePath);

صادق صدقی
شنبه 21 اسفند 1389, 09:46 صبح
سلام کاره قشنگیه
اما بهتر نبود برای چک کردن پسوند فایل ها از این گزینه استفاده می کردی؟


public string[] UploadFile(FileUpload FuImage,string ServerVariables,int maximumSize,string Extention)
{
string AdditionalPath = @"Admin\members\ImagesEmployments\";
string[] Result = new string[4];
long size = FuImage.FileContent.Length;
size /= 1024;
string ExtentionFile = Path.GetExtension(FuImage.FileName);
string FileName = Path.GetFileNameWithoutExtension(FuImage.FileName) ;
string UploadPath = ServerVariables +AdditionalPath + FileName + ExtentionFile;
if (maximumSize > size)
{
int r=string.Compare(Extention,ExtentionFile,true);
if (r==0)
{
sbyte i = 0;
while (CheckExists(UploadPath) == true)
{
i++;
FileName += "_" + i.ToString();
UploadPath = ServerVariables + AdditionalPath + FileName + ExtentionFile;
}
FuImage.SaveAs(UploadPath);
Result[0] = insert.StatuseInsert.success.ToString();

Result[1] = "~/" + AdditionalPath + FileName + ExtentionFile; ;

}//////if Compare
else
{
Result[0] = insert.StatuseInsert.Failed.ToString();
Result[1] = "فایل پشتیبانی نمی شود" + Environment.NewLine + "فقط عکس ها با پسونده " + Extention + " پشتیبانی می شود.";
}
}///if Size
else
{
Result[0] = insert.StatuseInsert.Failed.ToString();
Result[1] = "سایز فایل بیشتر از حد مجاز است!!" + Environment.NewLine + "حد اکثر سایز مجاز:" + maximumSize.ToString();
}
return Result;
}

protected bool CheckExists(string FileAddress)
{
FileInfo f = new FileInfo(FileAddress);
if (f.Exists)
{
return true;
}
return false;
}

این کلاسیه که خودم نوشتمش و دارم باهاش کار می کنم

mehrzad_ali
شنبه 21 اسفند 1389, 14:49 عصر
با تشکر از obalitjon
قابلیت ایجاد thumb برای پسوندهای bmp ,gif ,png, نیز اضافه شد ایرادی که داره اینه که برای عکسهای gif نمیشه thumb ایجاد کرد

farzadsmc
شنبه 13 خرداد 1391, 09:46 صبح
مثل اینکه فایلهای بیشتر از 500 کیلوبایت رو حتی در صورت عوض مقدار شرط، آپلود نمیکنه و خطای HTTP Error 400 - Bad Request v رو میده.

من با دیباگ کنترل کردم، وقتی فایلی با حجم بیشتر از 500 کیلوبایت رو میدی کلا برنامه جواب نمیده حتی اجرا به خط شرط هم نمیرسه که چک بکنه این بیشتر یا کمتر اون مقداری هست که دادیم یا نه.
در واقع باید خطایی که خودمون تعریف کردیم رو بده (اندازه حجم فایل باید کمتر از 150 کیلوبایت باشد) ولی کار نمیکنه.
حتی من شرط بررسی حجم فایل رو هم برداشتم ولی باز خطا داد. نمیدونم مشکل از کجاست.

من میخوام فایلهای تا حجم 2 مگابایت رو آپلود بکنه یا حداقل یک مگابایت.

fakhravari
شنبه 13 خرداد 1391, 13:14 عصر
مثل اینکه فایلهای بیشتر از 500 کیلوبایت رو حتی در صورت عوض مقدار شرط، آپلود نمیکنه و خطای HTTP Error 400 - Bad Request v رو میده.

من با دیباگ کنترل کردم، وقتی فایلی با حجم بیشتر از 500 کیلوبایت رو میدی کلا برنامه جواب نمیده حتی اجرا به خط شرط هم نمیرسه که چک بکنه این بیشتر یا کمتر اون مقداری هست که دادیم یا نه.
در واقع باید خطایی که خودمون تعریف کردیم رو بده (اندازه حجم فایل باید کمتر از 150 کیلوبایت باشد) ولی کار نمیکنه.
حتی من شرط بررسی حجم فایل رو هم برداشتم ولی باز خطا داد. نمیدونم مشکل از کجاست.

من میخوام فایلهای تا حجم 2 مگابایت رو آپلود بکنه یا حداقل یک مگابایت.
<system.web>
<httpRuntime maxRequestLength="20951" executionTimeout="1000"/>

farzadsmc
یک شنبه 14 خرداد 1391, 12:49 عصر
<system.web>
<httpRuntime maxRequestLength="20951" executionTimeout="1000"/>

من این خط رو تو تگ system.web اضافه کردم ولی کار نکرد بازم.

mehrzad_ali
سه شنبه 16 خرداد 1391, 17:20 عصر
ببینید با این مشکل حل میشه . چون من این Error رو ندارم


<httpRuntime executionTimeout="90" maxRequestLength="20000" useFullyQualifiedRedirectUrl="false" requestLengthDiskThreshold="8192"/>

mehrzad_ali
سه شنبه 16 خرداد 1391, 19:51 عصر
در ضمن این برنامه رو با ویژوال استودیو 2008 نوشتم اگه شما با 2010 باز میکنی نباید برنامه رو Convert کنی

farzadsmc
یک شنبه 21 خرداد 1391, 16:55 عصر
متاسفانه بازم کار نکرد.
نه کانورت نکردم

mehrzad_ali
یک شنبه 21 خرداد 1391, 20:36 عصر
شما یه پروژه جدید باز کن کدها رو توی اون کپی کن

mohsen_1687
سه شنبه 09 آبان 1391, 18:03 عصر
حتی اگه mime type هم بگیرید باز هم فایلهای مورد بحث اپلود میشن من با این روشی گه شما فرمودین کار کردم ولی باز هم اپلود کرد بعنوان مثال شما میتوانید یک فایل با این اسم که یک شل است را به راحتی اپلود کنید ::
123.aspx;.jpg

moferferi
شنبه 20 آبان 1391, 15:01 عصر
راستی بعد از ایجاد thumbnails از عکس حتما دستور image.Dispose(); اضافه کنید
چون عکس باز میمونه و علاوه بر اینکه حافظه سرور را بیجهت اشغال میکنه ،عکس اپلود شده را هم نمیشه پاک کرد

pashe3d
سه شنبه 29 بهمن 1392, 16:01 عصر
من الان تو مسیر ccdssd.ir / site1 / admin / gallery.aspx.cs هستم و میخوام فایلی رو به وسیله ی فایل آپلود در ccdssd.ir/httpdocs/img bodvi ذخیره کنم میشه راهنمایی کنین چه جوری آدرس بدم؟
ممنون

siamat
سه شنبه 29 بهمن 1392, 18:28 عصر
(@"~/....")

به جای نقطه چین ادرس اون قسمت رو بزارید

masoudsalahi
یک شنبه 21 تیر 1394, 11:22 صبح
سلام بر دوستان و اساتید
این کد خیلی به درد من خورد حالا من مشکلم اینه که هم تصویر با کیفیت اصلی ذخیره میکنه و هم تصویر با کیفیت پایین من فقط به تصویر با کیفیت پایین احتیاج دارم چطور باید کد تغییر بدم تا تصویر با کیفیت اصلی ذخیره نشه ؟