# Native Code > برنامه نویسی در Delphi > توسعه نرم افزارهای تحت شبکه > سوال: نمایش عکس از روی سرور

## sajioo

سلام دوستان بنده یک برنامه کلاینت سرور درست کردم بسیار سادست
برای بک گراند برنامه ی کلاینتم می خوام یک عکس رو از سرور من نشون بده.
اگر فرض کنیم IP : 47.221.21.290 سرور این باشد و عکس در پوشه ی c:/background/back.png باشد چطور این کارو بکنم.
من از indy client , server  استفاده کردم.
دوستان نمی خوام دانلود بشه و جای ذخیره بشه بعد نمایش بده.
اینطور نمی خوام.
با هر بار اجرا به اون آدرس دسترسی پیدا کنه و نمایش بده. :لبخند: 
عید بر شما مبارک

----------


## hadisalahi2

راه خیلی زیاده
اگه امنیت برات مهم نیست می تونی مستقیم با دادن آدرس آی پی و مسیر ، عکس رو باز کنی
در غیر این صورت بایداز FileStream استفاده کنی

قبلا یک تاپیک در مورد توی قسمت شبکه ایجاد کرده بودیم که کلا در همین مرد بحث میکنه
یک سرچ کوچولو پیداش میکنی

----------


## sajioo

هادی جان من یک ساعت و نیمه دارم میگردم پیدا نشد
لطف کن یک راهنمایی بکن یا اگه لینکشو داری برای بنده هم بذار
تشکر

----------


## khorsandreza

> راه خیلی زیاده
> اگه امنیت برات مهم نیست می تونی مستقیم با دادن آدرس آی پی و مسیر ، عکس رو باز کنی
> در غیر این صورت بایداز FileStream استفاده کنی
> 
> قبلا یک تاپیک در مورد توی قسمت شبکه ایجاد کرده بودیم که کلا در همین مرد بحث میکنه
> یک سرچ کوچولو پیداش میکنی


سلام اقای هادی 
با استفاده از IP تصویر باز نمی شود بهتر است اگر در برنامه اش از sql server استفاده می کند از امکانان اسکیوال سرور بهر ببرد مثال زیر


SELECT MyImage FROM
    OPENROWSET(BULK N'E:\1.jpg', SINGLE_BLOB) as tempImg

دستور بالا تصویر موجود در درایو E:\ بر روی سرور را select می کند 
1) اگر شما از کلاینت به سرور وصل بشوید براحتی میتوانید در محیط برنامه نویسی (دلفی / سی شارپ یا هر زبان دیگر) تصویر را نمایش بدهید
من یک مثال ساده برای دلفی قرار می دهم بقیه با خودتان

Procedure ShowPFullImage;
var
  BlobStream: TStream;
  JPEGImage: TJPegImage;
begin
Try
 if MainQImageThumbnail.AsString <> '' Then
 Begin
   BlobStream := MainQ.CreateBlobStream(MainQImageThumbnail,bmRead)  ;
   Try
      JPEGImage := TJPEGImage.Create;
       try
          JPEGImage.LoadFromStream(BlobStream);
          Image1.Picture.Assign(JPEGImage);
       finally
          JPEGImage.Free;
       end;
   finally
     BlobStream.Free;
   end;
 End ;
 Except
 End;
End;

----------


## Mask

پیشنهاد میکنم ، برای راحتی خودتون و همچنین پیاده سازی راحتتر و همچنین خاصیت Resume از وب سرور استفاده کنید.
یعنی چی؟
یه وب سرور مثل iis رو سرورتون نصب کنید و با کامپوننت Idhttp اقدام به دانلود و لود استریم به صورت مستقیم در شی ایمیج کنید.

----------


## hadisalahi2

> سلام اقای هادی 
> با استفاده از IP تصویر باز نمی شود بهتر است اگر در برنامه اش از sql server استفاده می کند از امکانان اسکیوال سرور بهر ببرد مثال زیر


سلام بر جنام ولی زاده گل
چرا عزیزم باز میکنه ، من خودم تست کردم
البته با اسم سرور بهتر جواب میده

در ویندوز 7 یک کم امنیت بالا رفته و موقع باز کردن یوزر و پس میخواد
منم فولدر مورد نظرم رو مپ درایو میکنم و بعدش که کارم تموم شد دیسکانکت میکنم





> یه وب سرور مثل iis رو سرورتون نصب کنید و با کامپوننت Idhttp اقدام به دانلود و لود استریم به صورت مستقیم در شی ایمیج کنید.


دلاور شما قرار بود یک چند تاپیک آموزشی بزارید ما حاش رو ببریم
اونا که نشد
لااقل این مبحث رو چند تا منبع آموزشی بده یه نگاهی بندازیم  :لبخند گشاده!:

----------


## Mask

برای دریافت فایل عکس از روی سرورهای ویندوزی ، 3 روش خوب و کار آمد هست.فعلا کاری به sql نداریم.
1-مدیریت ارسال و دریافت فایل توسط فایل استریم: که در این روش به علت اینکه مدیریت ارسال و دریافت کاملا با عهده برنامه نویس هست و همچنین ارسال و دریافت در یک کانکشن و خاصیت ادامه دانلود به صورت ذاتی وجود ندارد ، اصلا پیشنهاد نمیشود. که در این روش باید از پروتکلهای TCP و یا UDP استفاده کنیم.
2-ارسال توسط وب سرور و دریافت در برنامه : در این روش هم ، مانند روش اول به صورت فایل استریم عکس و فایل ارسال و دریافت میشود، اما با این تفاوت که برنامه سمت سرور رو دیگه برنامه نویس مدیریت نمیکند و ، برنامه سمت سرور رو برنامه نویسان بزرگ کمپانی هایی مثل مایکروسافت زحمتش رو برامون میکشند. :قلب:  و از پروتکل http استفاده میشود.
 این وب سرور ها (مانند IIS - Wamp _ Xamp ,...)امکانات بزرگی دارند که اگر بخواهیم در روش اول ، اون رو پیاده سازی کنیم ، زمان بسیار زیادی رو تلف کردیم. و باز هم به بهینه و اطمینانی که این وب سرورها دارند نمیرسیم.
امکانات :
1- خاصیت تکه تکه دیافت کردن فایل
2- خاصیت توقف و ادامه دریافت فایل
3- ایجاد محدودیت دریافت مقدار بسته های دریافتی
و...
3- ارسال و دریافت فایل توسط Ftp سرور :
در این روش هم باید یک Ftp سرور سمت سرور راه اندازی کرده و سپس درخواست دریافت فایل را از سمت کلاینت داده و استریم دریافتی را در شی ایمیج لود کنیم.

پیاده سازی :
روش اول : کافیه برنامه ای سمت سیستم دریافت کننده در حال اجرا باشد : روی پورتی که Listen هست، درخواست دریافت فایل رو گرفته و فایل رو دریافت میکند. و سیستم ارسال کننده هم اقدام به ارسال  کند. توسط TCP

سمت ارسال کننده :
uses jpeg;

procedure TForm1.Button1Click(Sender: TObject);
var
  TcpClient: TIdTCPClient;
  MS: TMemoryStream;
begin
  TcpClient := TIdTCPClient.Create();
  MS := TMemoryStream.Create;
  try
    with TcpClient do
    begin
      port := 1010;
      host := '127.0.0.1';
      ReadTimeout := -1;
    end;
    TcpClient.Connect;
    try
      Ms.LoadFromFile('c:\1.jpg');
      MS.Position := 0;
      TcpClient.IOHandler.WriteLn(IntToStr(Ms.Size));
      TcpClient.IOHandler.WriteBufferOpen;
      TcpClient.IOHandler.Write(Ms);
      TcpClient.IOHandler.WriteBufferClose;
    finally
      TcpClient.Disconnect;
    end;
  finally
    TcpClient.Free;
    MS.Free;
  end;
end;

سمت دریافت کننده :
uses jpeg;

procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
  Jpg:TJPEGImage;
  PicSize:Integer;
  MemRecieveStreamPic:TMemoryStream;
begin
  Jpg:=TJPEGImage.Create;
  MemRecieveStreamPic:=TMemoryStream.Create;
  try
    PicSize :=strtoint( AContext.Connection.IOHandler.ReadLn());
    AContext.Connection.IOHandler.ReadStream(MemReciev  eStreamPic,PicSize,false);
    MemRecieveStreamPic.Position:=0;
    Jpg.LoadFromStream(MemRecieveStreamPic);
    Image1.Picture.Bitmap.Assign(jpg);


  finally
    MemRecieveStreamPic.Free;
    Jpg.Free;
  end;
end;

روش دوم : در ابتدا باید یک وب سرور نصب و راه اندازی کنیم . که من IIS و یا Wamp رو پیشنهاد میکنم
پس از نصب ، و تنظیم پورت برنامه و Home Dir فایلهای مورد نظر را در پوشه های ایجاد شده در مسیر Home وب سرور قرار میدهیم.
بوسیله کامپوننت Idhttp عکس رو دانلود و در شی ایمیج مستقیما لود میکنیم.
uses  JPEG,pngimage;


procedure ShowImageFromStream(AImage: TImage; AData: TStream);
var
  JPEGImage: TJPEGImage;
begin
  AData.Position := 0;
  JPEGImage := TJPEGImage.Create;
  try
    JPEGImage.LoadFromStream(AData);
    AImage.Picture.Assign(JPEGImage);
  finally
    JPEGImage.Free;
  end;
end;


procedure ShowPngImageFromStream(AImage: TImage; AData: TStream);
var
  pngimage: TPngImage;
begin
  AData.Position := 0;
  pngimage := TPngImage.Create;
  try
    pngimage.LoadFromStream(AData);
    AImage.Picture.Assign(pngimage);
  finally
    pngimage.Free;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  ms: TMemoryStream;
  j: TJPEGImage;
begin
  ms := TMemoryStream.Create;
  try
    IdHTTP1.Get(Edit1.Text, ms);
    ShowPngImageFromStream(Image1, ms);
  finally
    ms.Free;
  end;
end;
روش سوم :
uses jpeg;

procedure TForm1.Button1Click(Sender: TObject);
var
  Ftp: TIdFTP;
  MS: TMemoryStream;
  Jpg:TJPEGImage;
begin
  MS := TMemoryStream.Create;
  Ftp := TIdFTP.Create(nil);
  Jpg:=TJPEGImage.Create;
  try
    with Ftp do
    begin
      ProxySettings.ProxyType := fpcmNone;
      ProxySettings.Port := 21;
      Host := '127.0.0.1';
      Username := 'username';
      password := 'pass';
    end;
    Ftp.Connect;
    try
      Ftp.Get('127.0.0.1\Pic\1.jpg', MS);
      MS.Position := 0;
      jpg.LoadFromStream(MS);
      Image1.Picture.Assign(jpg);
    finally
      Ftp.Quit;
      Ftp.Disconnect
    end;
  finally
    Ftp.Free;
    MS.Free;
    Jpg.free;
  end;
end;
این هم آموزش یکی از قسمتهایی که قولش رو داده بودم. :چشمک:

----------


## BORHAN TEC

در تکمیل صحبتهای Gold ( :قلب: ) در مورد روش FTP باید عرض کنم که اگه با کامپوننت های Indy کار کنیم قابلیت Resume میتونیم داشته باشیم ولی فایل رو نمیتونیم به صورت تکه تکه(مثل Internet Download Manager) دریافت کنیم. ولی اگه از کامپوننت های رایگان و کد باز Overbyte ICS استفاده کنیم این امکان رو هم داریم.  :چشمک: 
یکی از روشهای خوب برای اینکه بفهمیم فایل به درستی دریافت میشه استفاده از فریمورک DataSnap و استفاده از مبحث فیلترها در اون هست که زیاد جای توضیح داره و اگه کسی بخواد این مورد رو یاد بگیره باید زمان بیشتری صرف کنه.

----------


## hadisalahi2

> هادی جان من یک ساعت و نیمه دارم میگردم پیدا نشد
> لطف کن یک راهنمایی بکن یا اگه لینکشو داری برای بنده هم بذار
> تشکر


داداش این لینک اون صفحه هستش
https://barnamenevis.org/showthread.php?420434-%D8%B1%D9%88%D8%B4-%DA%A9%D9%BE%DB%8C-%DA%A9%D8%B1%D8%AF%D9%86-
%D9%81%D8%A7%DB%8C%D9%84-%D8%A8%D8%B1-%D8%B1%D9%88%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1-%D8%A8%D8%AF%D9%88%D9%86-%D8%A7%D8%B4%D8%AA%D8%B1%D8%A7%DA%A9-%DA%AF%D8%B0%D8%A7%D8%B4%D8%AA%D9%86-%D9%BE%D9%88%D8%B4%D9%87

توضیحاتی که داش محمد داد خیلی عالیه من دارم روش کار میکنم
ببینم کدوم از همه بهتر جواب میده
اگه تکمیل بشه حتما میزارم تا بچه ها هم استفاده کنند

----------


## hadisalahi2

> 2-ارسال توسط وب سرور و دریافت در برنامه : در این روش هم ، مانند روش اول به صورت فایل استریم عکس و فایل ارسال و دریافت میشود، اما با این تفاوت که برنامه سمت سرور رو دیگه برنامه نویس مدیریت نمیکند و ، برنامه سمت سرور رو برنامه نویسان بزرگ کمپانی هایی مثل مایکروسافت زحمتش رو برامون میکشند. و از پروتکل http استفاده میشود.


داداش میشه هم سیستم کلاینت و هم سرور رو رمی یک سرور پیاده سازی کرد دیگه؟
یعنی نیازی نیست حتما دو تا سسیتم برای این کار باشه؟

----------


## sajioo

> اگه تکمیل بشه حتما میزارم تا بچه ها هم استفاده کنند


دمت گرم




> داداش میشه هم سیستم کلاینت و هم سرور رو رمی یک سرور پیاده سازی کرد دیگه؟
> یعنی نیازی نیست حتما دو تا سسیتم برای این کار باشه؟


آره میشه مشکلی نیست

----------


## khorsandreza

باید عرض کنم بنده حدود یکسال هست روی آرشیو عکس فیلم وصدا کار می کنم خیلی این روش ها را تست کردم بنظر من بهترین روش برای بارگذاری و نمیش عکس از روی سرور همان استفاده از فایل استریم اسکیوال 2008R2 به بعد است در روش که آقای هادی فرمودند تقریبا از 7 یا  8 ماه قبل یک تبادل اطلاعات داشتیم به نظر من ناکارآمد است چون باید بخشی از دسترسی های سرور را به کاربر بدهی که منطقی نیست من حالا در بخش آرشیو فیلم در دو جا بیش از 1 میلیون تصویر را مدیریت می کنم و بروی شبکه نصب شده است راحت ترین و کارا»د ترین روش است البته به نظر بنده 
باز من نظرات دیگر دوستان را مطالعه خواهم کرد .
این هم یک نمونه از فرم تصویر

----------


## khorsandreza

> وجدانا به اندازه معلوماتتون نظر بدید..


سلام استاد
من ادعا ندارم سواد برنامه نویسی دارم و معلوماتهم خیلی کم است شما می توانید از تعداد تاپیک ها تشخیص بدهید و بی جهت تاپیک ایجاد نمی کنم ولی من هرچه فکر می کنم شما به چه روشی این مطلب را فرمودید عقلم بجای نرسید اگر منظورتان این است که شما مپ داریو درست کنید و یا از قابلیت $C مشابه استفاده بشه فکر می کنم امنین پایین هست اگه روش که فرمودید واضح تر بیان کنید ما نیز بهره ببریم.
اگر خاطرتان باشد یک بار این موضوع در این تاپیک مطرح شد .
شما همان نظر مطرح کرده بودید . ضعف امنیت ویندوز
دقیقا جمله شماست
"یکی از مشکلات امنیتی ای که در ویندوز وجود دارد اینه که درایو های سیستم بطور پیش فرض به اشتراک گذاشته می شوند و از طریق تایپ علامت $ پس از نام درایو می توان به کلیه محتویات آن دسترسی داشت.مثلا با تایپ $c در نوار آدرس می توان وارد این درایو شد.
روش فعال و غیر فعال کردن اشتراک پیش فرض(default share) در ویندوز xp و سون یک مقدار متفاوت است. ولی از طریق دستورات command prompt در ویندوز xp و سون یکسان است. این دستورات را هم می توان در run وارد کرد و هم در CMD . برای غیر فعال کردن یک share می‌توان از دستور زیر استفاده کرد"
من با استناد به این نطر شما عرض کردم امکان ندارد حالا شاید برداشت من اشتباه بوده باشد من دقیقا براساس اخرین گفته های شما روش فایل استریم اس کیوال سرور را مطالعه و ادامه دادم

----------


## hadisalahi2

بچه ها اینجا چه استاد و چه شاگرد همه رفیقیم
پس این تعارفات رو کنار بزاریم و به جاش یک کار واقعا عملی انجام بدیم تا هم به درد خودمون بخوره و هم به درد بقیه دوستان.
این وسط شاید صوابی هم نصیب بشه برای آخرتمون  :خجالت: 

من دیشب با مهندس ولی زاده صحبت کردم
به نظر من هر روشی مزایا و معایب خودش رو داره.
در مورد روشی که جناب ولی زاده میفرمایند
به نظر من مزایاش :

*1- همگامی داده های ذخیر ه شده با محتوا هستش (یعنی مثلا خود تصاویر با اطلاعات داخل جداول)
2- سرعت قابل قبوله ، چون به صورت استریم کار میکنه.
3- عدم نیاز به کدهای زیاد و پیچیه توسط برنامه نویسه ، چون این کارها رو خود SQl Server انجام میده.
*
اما معایبش:
*1- محدود بودن به نسخه خاص Sql Server
2- سنگین بودن و مدت زمان نسبتا طولانی نصب Sql Server هستش.

**اما در زمانی که امنیت خیلی زیاد اهمیت نداشته باشه ، به نظر من ساده ترین راه ، استفاده از همون درایو های شیر شده شبکه و ایجاد Map Drive  و خواندن و نشتن مستقیم در پوشه مورد نظر هستش
من به شخصه از این روش تا الان استفاده میکردم.*

اما روشی که محمد میگه رو هنوز تست نکردم ولی با این توضیحات حتما روش کار آمدی هستش
من میخوام این روش رو تست کنم.
از دوستان هم میخوام ، هر کدوم میتونند روی این موضوع کارکنند تا اگه خدا بخواد ، یک نمونه برنامه کامل اینجا بزاریم تا این بحث رو برای همیشه به نتیجه ای برسونیم

*چون تاپیک هایی که در این مورد دیدم خیلی خیلی زیاده و متاسفانه همه نیمه کاره رها شده.
امیدوارم این تاپیک رو نیمه کاره رها نکنیم.*

----------


## khorsandreza

سلام
من فکر می کنم یک سوء تفاهم پیش آمده باشد . 
من یشتر بروی WinApp نمرکز دارم و کار را روی آن بستر انجام می دهم ولی فکر می کنم با مباحث بالا دوست بیشتر  بروی WebApp متمرکز هستند . 
ولی اقای هادی منظور من این روش نیست "*
1- همگامی داده های ذخیر ه شده با محتوا هستش (یعنی مثلا خود تصاویر با اطلاعات داخل جداول)*"من به هیچ عنوان تصاویر را داخل دیتابیس ذخیره نمی کنم من مسیر را ذخیره می کنم
علی الحال از هکه دوستان تشکر می کنم

----------


## یوسف زالی

آقای خرسند؛

SELECT MyImage FROM
    OPENROWSET(BULK N'E:\1.jpg', SINGLE_BLOB) as tempImg

روی خیلی از سیستمهای سرور دستور مزبور توقیف است.



> To use the BULK option requires ADMINISTER BULK OPERATIONS permission.


خیلی از سرورها، از جمله سرور های عادی شرکت ها اجازه اجرای چنین دستوراتی رو سلب می کنند.
دستوراتی مثل OpenRowSet  و ارسال ایمیل و Bulk و ...




> من به هیچ عنوان تصاویر را داخل دیتابیس ذخیره نمی کنم من مسیر را ذخیره می کنم


اگر فایل در مقصد مورد نظر به هر دلیلی تغییر کرد یا حذف شد، تکلیف چیست؟
بهتره در این موارد اگر قراره اس کیو الی کار انجام بشه، از طریق FileStreaming خود اس کیو ال انجام بشه..
و مورد دیگه، اگر برنامه ما اصلا نیازی به اس کیو ال نداشت چی؟ مثلا با PostGre یا سیستم های دیگه..

هادی؛



> توضیحاتی که داش محمد داد خیلی عالیه من دارم روش کار میکنم


محمد کیه؟!

هر روشی مزایای خودش رو داره. مثلا برای برنامه 100 تومانی فولدری بزنید بره  :لبخند گشاده!:  (جدی نگیریدا)
برای کارهای دیتابیسی تحت اس کیو ال و با حجم و تعداد بالا بهترین گزینه FileStreaming هست.
برای حجم و تعداد کم روش ذخیره خود فایل در فیلد بد نیست. روش ذخیره مسیر رو هم اصلا جالب نمی دونم.

برای استفاده از روش انتقال فایل با InDy یا اشیای مشابه، باید یک فولدری رو قفل کنید تا اختصاصی برنامه شما بشه و کسی نتونه به اجزای درونش دست برنه.
اگر برنامه قراره بعدا گسترش پیدا کنه، بهتره براش سرویس، یا وب سرویس مناسب هم نوشته بشه. اما برای برنامه های کوچیک می شه از همون روش فولدری استفاده کرد.

برادر حمزه، مشکل فولدری رو هم توضیح بدید فیض می بریم.
 :متفکر:

----------


## hadisalahi2

> من به هیچ عنوان تصاویر را داخل دیتابیس ذخیره نمی کنم من مسیر را ذخیره می کنم


آقا محمد رضای گل ، من گفتم مزیتشه
ولی نگفتم شما استفاده میکنی که ...  :لبخند گشاده!: 




> محمد کیه؟!


یوسف جان من اسم هر کی رو ندونم بهش میگم محمد  :لبخند گشاده!: 
حالا چون گفتی فهمیدم ، که محمد همون حمزه خودمونه  :قهقهه: 





> اگر فایل در مقصد مورد نظر به هر دلیلی تغییر کرد یا حذف شد، تکلیف چیست؟


اگه آدرس فایلها رو به صورت نسبی ذخیره کنیم ، فکر نکنم مشکلی پیش بیاد
من به شخصه این کار و میکنم  و مشکلی نداشتم تا الان
در ضمن اون چه سروریه که هر کی دلش بخواد بره و فایلهای توی اون رو جابجا کنه  :متفکر: 
اون که دیگه سیستم سرور نیست ، بیشتر شبیه کاروانسراست  :لبخند گشاده!: 




> بهتره در این موارد اگر قراره اس کیو الی کار انجام بشه، از طریق FileStreaming خود اس کیو ال انجام بشه..


این روش خوبه اما دو تا مشکل بزرگ داره
اول اینکه حجم بانک اطلاعاتی خیلی بالا میره
و دوم اینکه موقع ذخیره سازی اینقدر sql Server پوشه های تو در تو میسازه که بری توش دیگه فکر نکنم راه خروج رو پیدا کنی.





> هر روشی مزایای خودش رو داره. مثلا برای برنامه 100 تومانی فولدری بزنید بره  (جدی نگیریدا)


این رو خیلی باهات موافقم
اما برای 100 تومن حیفه آدم کلا به سمت سیستم بره تا اینکه بخواد برنامه بنویسه  :قهقهه: 




> برای استفاده از روش انتقال فایل با InDy یا اشیای مشابه، باید یک فولدری رو قفل کنید تا اختصاصی برنامه شما بشه و کسی نتونه به اجزای درونش دست برنه.
> اگر برنامه قراره بعدا گسترش پیدا کنه، بهتره براش سرویس، یا وب سرویس مناسب هم نوشته بشه. اما برای برنامه های کوچیک می شه از همون روش فولدری استفاده کرد.


ما هم به این روشس علاقمند شدیم
اما روش کار رو بلد نیستیم
اصلا نمیدونیم از کجا شروع کنیم  :افسرده: 


حمزه (همون محمد) یالا یالا
آمورش میخوایم یالا   :تشویق:

----------


## یوسف زالی

> اگه آدرس فایلها رو به صورت نسبی ذخیره کنیم ، فکر نکنم مشکلی پیش بیاد
> من به شخصه این کار و میکنم و مشکلی نداشتم تا الان
> در ضمن اون چه سروریه که هر کی دلش بخواد بره و فایلهای توی اون رو جابجا کنه 
> اون که دیگه سیستم سرور نیست ، بیشتر شبیه کاروانسراست


ربطی به نسبی بودن نداره. خود فایل رو جابجا می کنند!
آی تی من های بی سواد عزیز من، معلومه با این شرکت های بزرگ سر و کله نزدی ها.
و برنامه های جانبی روی سرور، معمولا شرکت ها فقط از یک برنامه یا از یک شرکت استفاده نمی کنند.




> این روش خوبه اما دو تا مشکل بزرگ داره
> اول اینکه حجم بانک اطلاعاتی خیلی بالا میره
> و دوم اینکه موقع ذخیره سازی اینقدر sql Server پوشه های تو در تو میسازه که بری توش دیگه فکر نکنم راه خروج رو پیدا کنی.


حجم بانک بالا نمی ره، چون اصلا در بانک ذخیره نمی شه. فایله کنار دی بی.
شما به پوشه هاش کار نداشته باش!
مهم اینه که جلوی دستکاری فایل ها رو می گیره.

به هر جهت برادر حمزه توضیحات مکفی رو می دند ان شا الله  :لبخند گشاده!:

----------


## sajioo

IdHTTP1.Get(Edit1.Text, ms);


آقا من نحوه ی آدرس دادنشو نفهمیدم.
چه طور باید آدرس داد؟
من فقط یک ip  سرور دارم و بس.
یکی با مثال به بنده بگه لطفا؟

دوستان حل شد iis نصب نبود

----------


## hadisalahi2

متاسفانه من هم کاری از پیش نبردم
اصلا کلا نمیفهمم الان تصاویر کجا ارسال میشه و چطوری باید لود بشه.
اگه حمزه جان یک ندا این دوستان درمانده را دریابند ، لطف بزرگی به بشریت کرده اند  :لبخند گشاده!:

----------


## Mask

دقیقا مشکل کجاست.
احساس میکنم یه مقدار قسمت شبکتون ضعیفه.
شما بپرسید من جواب میدم تا روشن بشید.

----------


## hadisalahi2

حمزه جان ببین داداش
من میرم Control Panel --> Add Remove Program  و از اونجا IIS رو نصب میکنم

خوب حالا اون دو تا تیکه کد رو چیکار کنم؟

ببخشید که خیلی بیسوادم داداش
آخه توی این مبحث من تا الان حتی یک خط کد هم ننوشتم

----------


## Mask

> حمزه جان ببین داداش
> من میرم Control Panel --> Add Remove Program  و از اونجا IIS رو نصب میکنم
> 
> خوب حالا اون دو تا تیکه کد رو چیکار کنم؟
> 
> ببخشید که خیلی بیسوادم داداش
> آخه توی این مبحث من تا الان حتی یک خط کد هم ننوشتم


زمانی که iis رو نصب کردید ، سیستمتون تبدیل میشه به یک وب سرور.
الان وقتی رو خود سیستمتون ، در مرورگر بنویسید 127.0.0.1 باید صفحه اول iis رو ببینید.
خوب حالا برید تو تنظیمات iis و ببینید HomDirectory  دقیقا کجا تعریف شده.
مثلا  مسیر C:\Inetpub\wwwroot تعریف شده.
خوب پس معلوم میشه هر فایلی رو ما در این مسیر بگزاریم. وب سرویس بهمون بر میگردونه.
مثال :
فایلی به اسم ali.exe رو بریزید در این مسیر.
حالا کافیه تو مرورگرتون بنویسید :
http://127.0.0.1/ali.exe
میبینید که برنامه IDM (اگه نصب باشه) میاد بالا و میخاد که بره برای دانلود.
با این توضیحات باید متوجه بشید که سناریو به چه شکلیه.
حالا با کدهایی که من قرار دادم میتونید این فایل رو دانلود کنید.

----------


## hadisalahi2

> الان وقتی رو خود سیستمتون ، در مرورگر بنویسید 127.0.0.1 باید صفحه اول iis رو ببینید.


من وقتی این آدرسش رو میزنم ازم یوزر پس میخواد
باید کدوم یوزر پس رو وارد کنم؟




> خوب پس معلوم میشه هر فایلی رو ما در این مسیر بگزاریم. وب سرویس بهمون بر میگردونه.


چطوری اول آپلودش کنیم که بعد بخوایم دانلودش کنیم؟

----------


## sajioo

دوستان عکس های png  رو من راحت میارم اما
عکس های که jpg  یا jpeg ذخیره میشن رو وقتی می خوام در برنامه سمت کلاینت باز کنم پیام میده

jpeg error #53


فکر کنم نحوه ذخیره فایل jpg مشکل داره چون وقتی یک jpg دیگه رو از خود ویندوز  آپ کردم (دستی) رو سرور و تو برنامه کلاینت تست کردم جواب داد.
نظر شما چیست دوستان؟
 :متفکر:

----------


## Mask

> من وقتی این آدرسش رو میزنم ازم یوزر پس میخواد
> باید کدوم یوزر پس رو وارد کنم؟
> 
> 
> چطوری اول آپلودش کنیم که بعد بخوایم دانلودش کنیم؟


این سوالتون دیگه ربطی به دلفی نداره. بهتره روش کانفیگ iis رو در گوگل سرچ و انجام بدید.



> فکر کنم نحوه ذخیره فایل jpg مشکل داره چون وقتی یک jpg دیگه رو از خود ویندوز آپ کردم (دستی) رو سرور و تو برنامه کلاینت تست کردم جواب داد.
> نظر شما چیست دوستان؟


اول اینکه زحمت بکشید و کدتون رو قرار بدید. دوم اینکه کتابخانه های مربوطه رو Uses کردید.؟

----------


## sajioo

> اول اینکه زحمت بکشید و کدتون رو قرار بدید.


از کدهای خودتون استفاده کردم

سمت کلاینت برای ارسال عکس به سرور


varMS: TMemoryStream;beginMS := TMemoryStream.Create;tryform1.OpenDialog1.Execute;  if form1.OpenDialog1.FileName<>'' then     begin  Ms.LoadFromFile(form1.OpenDialog1.FileName);
      MS.Position := 0;      form1.IdTCPClient1.IOHandler.WriteLn('photo|'+User  Name+'|'+IntToStr(Ms.Size));      form1.IdTCPClient1.IOHandler.WriteBufferOpen;      form1.IdTCPClient1.IOHandler.Write(Ms);      form1.IdTCPClient1.IOHandler.WriteBufferClose;       end;finally     MS.Free;
end;end;




سمت کلاینت برای نمایش عکس


var  ms: TMemoryStream;  j: TJPEGImage;begin  ms := TMemoryStream.Create;  tryIdHTTP1.Get(Edit1.Text,ms);

  ShowImageFromStream(Image1, ms);  finally    ms.Free;  end;end;



سمت سرور برای ذخیره عکس




 Jpg:=TJPEGImage.Create;  MemRecieveStreamPic:=TMemoryStream.Create;  try    PicSize :=strtoint( command[2]);    user:=  command[1];    AContext.Connection.IOHandler.ReadStream(MemReciev  eStreamPic,PicSize,false);    MemRecieveStreamPic.Position:=0;    Jpg.LoadFromStream(MemRecieveStreamPic);    Image1.Picture.Bitmap.Assign(jpg);

  finally    MemRecieveStreamPic.Free;    Jpg.Free;    Image1.Picture.SaveToFile('C:\inetpub\wwwroot\prof  ile\'+command[1]+'.JPG');       str:='photo|1|'+user+'|';  end;






> دوم اینکه کتابخانه های مربوطه رو Uses کردید.؟


بله استفاده کردم :متفکر:

----------


## sajioo

دوستان چکار کنیم بنظرتون؟ :متفکر:

----------


## Veteran

فایل رو به صورت باینری ارسال کنید و در برنامه به وسیله API ویندوز نمایش بدید.

----------

