PDA

View Full Version : ذخیره کردن مسیر عکس در دیتا بیس



rohollahmahmoodiany
شنبه 21 خرداد 1384, 02:08 صبح
چگونه میتوان یک browser (شبیه htmlinputfile)ایجاد کرد که به جای ذخیره کردن خود عکس مسیر فیزیکی ان را (بعد از browse شدن عکس)در sql دخیره کند.asp.net+c#

H_Ghaffarian
یک شنبه 22 خرداد 1384, 12:22 عصر
سلام
بله. شما باید مسیر فیزیکی عکس رو در دیتابیس ذخیره کنید. برای این منظور یک فولدر برای قرار دادن عکس ها ایجاد کنید و بعد فایل ها رو به اون بفرستید و مسیر رو هم در دیتا بیس ذخیره کنید . در وب, بهتر نام فایل رو فقط ذخیره کنید و بقیه مسیر رو با دستورserver.mappath بدست بیاورید. ::نوشتن::

rohollahmahmoodiany
دوشنبه 23 خرداد 1384, 18:34 عصر
ممنون اقای غفاریان !
ببینید فرضا که کاربر عکی را از مسیر c:\ بروس کرد .حالا هدف این است که ادرس خود به خود در همین لحظه به دیتا بیس برود.در ضمن در مورد servermappath چگونه میتوان به کمک ان عکس را در image box نشان داد.


با تشکر!

H_Ghaffarian
پنج شنبه 26 خرداد 1384, 09:38 صبح
سلام
شما باید اول در خود صفحه وب در قسمت تگ شروع فرم بصورت زیر عمل کنید:

<form id="Form1" method="post" encType="multipart/form-data" runat="server">

بعد یک Input file به فرمتون اضافه کنید و یک دکمه هم برای ارسال نتیجه کار به سرور در فرم قرار بدید. کد زیر البته با VB.Net نوشته شده که براحتی می تونید اون رو به #C تبدیل کنید:

Imports System.IO
Imports System


Public class ...

Private Sub btnInsert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnInsert.Click
lblError.Visible = False
Try
Dim fn As String
Dim FilePath As String
FilePath = "Files"
If Not (FPath.PostedFile Is Nothing) Then
fn = Server.MapPath(FilePath) + "\" + System.IO.Path.GetFileName(FPath.PostedFile.FileNa me)
If File.Exists(fn) Then
lblError.Visible = True
lblError.Text = "نام فایل تکراری است. لطفاً نام آنرا تغییر دهید."
Exit Sub
End If
FPath.PostedFile.SaveAs(fn)
End If
lblError.Visible = True
lblError.Text = "فایل مورد نظر بر روی سرور قرار گرفت."
Catch
lblError.Visible = True
lblError.Text = "خطا در ارسال فایل به سرور.لطفاً عملیات را تکرار نمائید."
End Try
End Sub


تا اینجای کار فایل شما از Fpath که یک Input file است گرفته می شه و بعد در یک فولدر با نام Files قرار می گیره. همچنین اگه دقت کرده باشید در اینجا fn مسیر کامل فایل بر روی سرور به همراه نام اون در سرور رو بر می گردونه و دستور زیر هم برای گرفتن تنها نام فایل انتخابی کاربر بکار می ره:

System.IO.Path.GetFileName(FPath.PostedFile.FileNa me)

حالا خیلی راحت می تونید مسیر فیزکی و مطلق فایل رو در سرور ذخیره کنید و یا اینکه فقط نام اون رو ذخیره کنید و بعد مسیر نسبی رو برای فایل در حین خواندن از سرور به شکل زیر انتساب بدید:

<img src='Files\<%#container.dataitem("Path")%>' >
البته می تونید در Code behind هم با دستور زیر فایل های یک فولدر رو بر گردونید:

Dim DirList As String() = Directory.GetFiles(Path, "*.*")

در مورد کنترل Image خود net. هم کافی مثل کنترل های img در html عمل کنید و مسیر عکس رو مثل بالا به اون بدید.

rohollahmahmoodiany
جمعه 27 خرداد 1384, 00:10 صبح
اقا ممنون !
یه مشکل در حین اجرای برنامه دارم:
Access to the path "c:\inetpub\wwwroot\WebApplication9\files\a.jpg" is denied
در ضمن در مورد ذخیره مسیر در دیتا بیس ایا باید همان fn را ریخت تو دیتا بیس.

rohollahmahmoodiany
جمعه 27 خرداد 1384, 12:49 عصر
در یک مقاله ای خواندم که مشکل فوق اینگونه حل میشود که باید در تب home directory چک باکس مربوط به write را فعال کرد.این کار را کردم اما فایده نداشت.
در ضمن در کد مربوط به محاسبه مسیر fn کد "/"را خطا میگیرد.

rohollahmahmoodiany
شنبه 28 خرداد 1384, 19:10 عصر
ایا دوستان نظری ندارند؟
ممنون!

H_Ghaffarian
یک شنبه 29 خرداد 1384, 09:35 صبح
سلام
اول اینکه همونطور که گفتم شما می تونید مسیر کامل فایل بر روی سرور و یا تنها نام اون رو در دیتا بیس ذخیره کنید. البته در حالت دوم در حین فراخوانی فایل باید مسیر نسبی رو قبل از نام فایل بیارید(مسیر پوشه حاوی فایل) و بعد نام فایل رو قید کنید. البته اگه استفاده از مسیر فیزیکی و مطلق برای برگردوندن فایل با مشکل همراه بهتر از مسیر نسبی استفاده کنید.fn هم مسیر کامل فایل برای ذخیره در پوشه مورد نظر بر روی سرور است.
دوم شما در مورد Error مزبور باید خاصیت write همون پوشه محل ذخیره فایل رو فعال کنید نه پوشه برنامه رو.
سوم اینکه در مورد مسیر / با \ نباید فرقی داشته باشه اما اگه گیر می ده خوب از اون استفاده نکنید.