راهنمایی
با سلام و وقت بخیر خدمت همه عزیزان من یک سایت دارم که تا به امروز عکسی که از کاربر دریافت می کردم می بردم توی روت سایت ذخیره میشد ولی الان من آمدم یک هاست دانلودی تهیه کردم که این عکسها را درون اونجا ذخیره کنم و از اونها فراخوانی کنم به کاربر نشان بدم الان باید چطوری آدرس دهی را تغییر بدم که ادرسی که آپلود میشه بره داخل هاست دانلودی ذخیره بشه لطفا اگر کسی در این مورد چیزی بلد هست ممنون میشم راهنمایی کنید و اگر آموزشی بلد هستین خوشحال میشم که معرفی بفرمایید که بتونم این مشکل را برطرف کنم
5 پاسخ
- محمد اشرافی21 خرداد ۱۴۰۱
سلام وقت بخیر از کد های زیر استفاده کنید
using System.Net; using Common.Application.FileUtil.Interfaces; using Microsoft.AspNetCore.Http; namespace Common.Application.FileUtil.Services; public class FtpFtpFileService : IFtpFileService { private string _ftpServer = "ftp://194.147.142.197/public_html"; private NetworkCredential CreateNetworkCredential() { return new NetworkCredential("userName", "password"); } public async Task SaveFile(IFormFile file, string directoryPath) { var ftpAddress = _ftpServer; string currentDir = ftpAddress; string[] subDirs = directoryPath.RemoveWWWroot().Split('/'); foreach (var subDir in subDirs) { currentDir = currentDir + "/" + subDir; await CreateDirectory(currentDir); } long length = file.Length; if (length < 0) throw new Exception(); await using var stream = file.OpenReadStream(); //Read File byte[] bytes = new byte[length]; await stream.ReadAsync(bytes, 0, (int)file.Length); //Save File WebClient request = new WebClient(); request.Credentials = CreateNetworkCredential(); var path = currentDir + "/" + file.Name; await request.UploadDataTaskAsync(new Uri(path), bytes); } public async Task<string> SaveFileAndGenerateName(IFormFile file, string directoryPath) { var fileName = $"{Guid.NewGuid()}{Path.GetExtension(file.FileName)}"; var ftpAddress = _ftpServer; string currentDir = ftpAddress; string[] subDirs = directoryPath.RemoveWWWroot().Split('/'); foreach (var subDir in subDirs) { currentDir = currentDir + "/" + subDir; await CreateDirectory(currentDir); } long length = file.Length; if (length < 0) throw new Exception(); await using var stream = file.OpenReadStream(); //Read File byte[] bytes = new byte[length]; await stream.ReadAsync(bytes, 0, (int)file.Length); //Save File WebClient request = new WebClient(); request.Credentials = CreateNetworkCredential(); var path = currentDir + "/" + fileName; await request.UploadDataTaskAsync(new Uri(path), bytes); return fileName; } public async Task SaveFile(Stream stream, string directoryPath, string fileName) { var ftpAddress = _ftpServer; string currentDir = ftpAddress; string[] subDirs = directoryPath.RemoveWWWroot().Split('/'); foreach (var subDir in subDirs) { currentDir = currentDir + "/" + subDir; await CreateDirectory(currentDir); } long length = stream.Length; if (length < 0) throw new Exception(); //Read File byte[] bytes = new byte[length]; await stream.ReadAsync(bytes, 0, (int)stream.Length); //Save File WebClient request = new WebClient(); request.Credentials = CreateNetworkCredential(); var path = currentDir + "/" + fileName; await request.UploadDataTaskAsync(new Uri(path), bytes); } public async Task DeleteFile(string path, string fileName) { string filePath = $"{_ftpServer}{path.RemoveWWWroot()}/{fileName}"; var request = (FtpWebRequest)FtpWebRequest.Create(new Uri(filePath.RemoveWWWroot())); request.Method = WebRequestMethods.Ftp.DeleteFile; request.Credentials = CreateNetworkCredential(); var response = await request.GetResponseAsync(); response.Close(); } public async Task DeleteFile(string filePath) { var request = (FtpWebRequest)FtpWebRequest.Create(new Uri($"{_ftpServer}{filePath.RemoveWWWroot()}")); request.Method = WebRequestMethods.Ftp.DeleteFile; request.Credentials = CreateNetworkCredential(); var response = await request.GetResponseAsync(); response.Close(); } public async Task DeleteDirectory(string directoryPath) { string filePath = $"{_ftpServer}{directoryPath.RemoveWWWroot()}"; var request = (FtpWebRequest)FtpWebRequest.Create(new Uri(filePath)); request.Method = WebRequestMethods.Ftp.RemoveDirectory; request.Credentials = CreateNetworkCredential(); var response = await request.GetResponseAsync(); response.Close(); } private async Task CreateDirectory(string directoryPath) { try { var reqFTP = (FtpWebRequest)FtpWebRequest.Create(directoryPath); reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; reqFTP.UseBinary = true; reqFTP.Credentials = CreateNetworkCredential(); FtpWebResponse response = (FtpWebResponse)await reqFTP.GetResponseAsync(); var ftpStream = response.GetResponseStream(); ftpStream.Close(); response.Close(); } catch (Exception ex) { //directory already exist I know that is weak but there is no way to check if a folder exist on ftp... } } } static class FtpTextHelper { public static string RemoveWWWroot(this string text) { return text.Replace("wwwroot", ""); } } - کورش ندیمی26 خرداد ۱۴۰۱
سلام مهندس وقت شما بخیرو شادی این کدها را از چه سایت یا آموزشی زحمتش را کشیدین لطفا خود اون سایت و یاآموزش را به بنده معرفی بفرمایید ممنون از اینکه زحمت راهنمایی بنده را همیشه میکشید
- محمد اشرافی3 تير ۱۴۰۱
سلام ، این کدها مال خودمه آموزشی براش وجود نداره ولی میتونید جای اینا از یه کتابخونه به اسم FLuentFtp استفاده کنید
- کورش ندیمی4 تير ۱۴۰۱
سلام مهندس وقت شما بخیر و شادی ولا من دیگه پوستم کنده شده انقدر توی اینتذنت دنبال این آموزش FTP گشتم و چیزی پیدا نکردم یعنی همه این کدها را درون کنترولر بنویسم چون نگاهی که به کدهای شما کردم چندین چند قسمت داره
- کورش ندیمی4 تير ۱۴۰۱
مهندس خود شما آموزشی برای کد ها دارین
