PDA

View Full Version : سوال: تغییر نام عکس در upload



vba_hadi
یک شنبه 23 خرداد 1389, 13:38 عصر
سلام، من از تگ <asp:FileUpload برای آپلود عکس استفاده کردم. حالا میخوام که اگر کاربر عکسی را انتخاب نکرد، سیستم بطور خودکار عکسی را که در مسیر خاصی در سرور است را به جای عکس کاربر انتخاب کنه. چیکار کنم. فوریه

Vahid_moghaddam
یک شنبه 23 خرداد 1389, 13:46 عصر
وقتی برای fileupload فایلی انتخاب نمیشه پس fileupload فایلی نداره! یعنی
fileUpload.HasFile برابر false هست. با چک کردن این مقدار و false بودنش عکسی رو که می خواید به کاربر نسبت بدید.

vba_hadi
دوشنبه 24 خرداد 1389, 15:10 عصر
ممنون دوست عزیز،
هنوز متوجه نشدم. فرض کن اگر کاربر عکسی را انتخاب نکرد میخوام برنامه ام بصورت اتوماتیک
در textbox قسمت Upload1.FileName عکسی خاص در مسیر خاص در سرور را انتخاب کنه. در حقیقت میخوام همه کاربران عکس داشته باشن یا خودشان انتخاب کنن یا سیستم

hamedsabzian
دوشنبه 24 خرداد 1389, 15:30 عصر
1. کار بر شما وارد صفحه ای میشه که عکسش رو ببینه یا اینکه تغییرش بده.
2. یه کنترل Image برای نمایش عکس و یه FileUpload برای آپلود عکس.
3. شما توی مثلا Page_Load چک می کنید که آیا کاربر عکس داره یا نه.
4. اگه عکس داشت که نمایش داده میشه و گرنه عکس پیشفرض رو میزارید.
5. کاربر میخواد عکس Upload کنه یا عکس قبلی رو عوض کنه، پس دکمه ی Brows رو میزنه و عکس رو Upload میکنه.
6. عکس قبلی رو پاک می کنید و به جاش عکس جدید رو می زارید.(فرض شده فقط یک عکس داره)

مشکل کجاست؟

Vahid_moghaddam
دوشنبه 24 خرداد 1389, 15:42 عصر
شما احتمالا توی صفحه یه image دارید که وقتی کاربر عکس upload می کنه، عکس رو توی این image نمایش می دید. قبل از upload عکس و یا زمانی که کاربر عکسی upload نکرده، ادرس این image رو برابر آدرس تصویر پیش فرض قرار بدید مثلا images/user.gif . وقتی کاربر عکس رو upload می کنه، توی رویدادی که برای مدیریت فایل فرستاده شده نوشتید، آدرس image رو تغییر بدید به آدرس عکس upload شده.

در نهایت اگه آدرس image برابر آدرس پیش فرض باشه، یعنی کاربر عکسی upload نکرده.

vba_hadi
سه شنبه 25 خرداد 1389, 11:54 صبح
آقا وحید و حامد جان ممنون.
ولی یا من متوجه نشدم یا منظورمو درست نگفتم. آیا میشود مسیر
FileUpload1.PostedFile.FileName را بصورت دستی وارد کرد؟ چون موقع ذخیره عکس تو بانک
(byte[] imageContent = new byte[imageSize];) باید اندازه، نوع و stream عکس باشه یعنی یه عکس
حتما در
FileUpload1 لود شده باشه

hamedsabzian
سه شنبه 25 خرداد 1389, 12:15 عصر
اگر عکس روی سرور باشد( عکس پیشفرض)، نیازی به FileUpload نیست!
System.Drawing.Image image = System.Drawing.Image.FromFile(Server.MapPath("~/GeneralImages/NoPic.jpg"));
MemoryStream imageStream = new MemoryStream();
image.Save(imageStream, System.Drawing.Imaging.ImageFormat.Jpeg);
imageStream.ToArray();
در ضمن ذخیره ی عکس در پایگاه داده کار زیاد جالبی نیست، بهتر بود عکس رو در یه پوشه کپی می کردید و آدرس اون رو ذخیره می کردید.
فرض کنید تعداد زیادی از کاربرای شما عکس نداشته باشن، شما می خواید به ازای همشون عکس پیشفرض رو بریزید توی DB!!!

vba_hadi
چهارشنبه 26 خرداد 1389, 10:05 صبح
نحوه ذخیره تصاویر هم نام در یک پوشه در سی شارپ:
آقا حامد مرسی. مشکلم حل شد تصمیم گرفتم تصاویر رو داخل پوشه بریزم.
حالا یه سوال: برای اینکه تصاویر هم نام اوررایت نشه چیکار کنم؟ لطفا کد C# بدید.

hamedsabzian
چهارشنبه 26 خرداد 1389, 10:37 صبح
عکس ها رو Rename کنید. برای نام جدید از کلاس Guid استفاده کنید.
string imageName = Guid.NewGuid().ToString() + System.IO.Path.GetExtension(fu.FileName);
fu.SaveAs(Server.MapPath("~/UserImages/") + imageName);

naser2009
چهارشنبه 26 خرداد 1389, 13:17 عصر
عکس ها رو Rename کنید. برای نام جدید از کلاس Guid استفاده کنید.


سلام دوسته من
ولی در حالت های بالاتر(تعداد عکس بالا) ممکنه احتمال یک درصد guid تکراری باشه :افسرده:
به هر حال من از این کد استفاده می کنم که در صورتی که فایلی با این نام از قبل وجود داشته باشه اسمشو عوض میکنم (یه عددی با کلاس random بهش اضافه می کنم) ودر غیر اینصورت فایل با همون نامه خودش ذخیره میکنم.
به همراه سایر چک ها که مثلا عکس باشه و از نوع bmp یا jpg و سایزش هم از 200k کمتر باشه که بسته به کاری که میخوایی انجام بدی و حجم هاستت اینارو تنظیم میکنی.

string strFileName=string.Empty;
string newstr=string.Empty;
strFileName = PicUploader.PostedFile.FileName;
string c = System.IO.Path.GetFileName(strFileName);
try
{
if (PicUploader.HasFile)
{
if (string.Compare(PicUploader.PostedFile.ContentType , "image/pjpeg") == 0 ||
string.Compare(PicUploader.PostedFile.ContentType, "image/bmp") == 0)
{
if (PicUploader.PostedFile.ContentLength <= 204800)
{
Random r = new Random();
int Randomnumber = 0;
if (File.Exists(Server.MapPath(@"images\UserImage\") + c))
{
do
{
Randomnumber = r.Next(1, 100000);
newstr = string.Concat(Randomnumber, c);
} while (File.Exists(Server.MapPath(@"images\UserImage\") + newstr));
PicUploader.PostedFile.SaveAs(Server.MapPath(@"images\UserImage\") + newstr);
imgUserImage.ImageUrl = @"images\UserImage\" + newstr;
}
else
{
PicUploader.PostedFile.SaveAs(Server.MapPath(@"images\UserImage\") + c);
imgUserImage.ImageUrl = @"images\UserImage\" + c;
}
lblResult.Text = "عکس مورد نظر شما به دست ما رسید";
lblResult.ForeColor = Color.Green;

}
else
{
lblResult.Text = "حداکثر اندازه عکس 200 کیلو بایت می باشد";
lblResult.ForeColor = Color.Red;
}
}
else
{
lblResult.Text = "پسوند فایل مورد قبول نمی باشد";
lblResult.ForeColor = Color.Red;
}
}
}
catch (Exception exp)
{
lblResult.Text = "عکس مورد نظر شما به دست ما نرسید";
lblResult.ForeColor = Color.Red;
}

Vahid_moghaddam
چهارشنبه 26 خرداد 1389, 14:13 عصر
با توجه به اینکه شما از کلمه کاربر استفاده کردید و احنمالا این کاربر یه id داره که منحصر به فرده (توی دیتابیس) می تونید از این id برای تولید اسم استفاده کنید.