سلام و خسته نباشید جناب مهندس
وقتی سایت روی لوکال اجرا میشه فایل ها به سادگی بر روی هاست دانلود و با استفاده از ftp اپلود میشه .. اما وقتی سایت پابلیش میشع و بر روی هاست قرار میگیره وقتی اقدام به اپلود فایل میکنیم با این ارور مواجه میشیم .
unauthorized access exception : access to the pass ,...,.. is denied میگه دسترسی غیر مجاز .. چرا به نظرتون رو لوکال مشکلی نداره رو سرور این ارور رو میده
سلام دوست من
این مشکل به دلیل عدم دسترسی شما به آدرسی از سرور اتفاق میفته
به واحد پشتیبانی سرور تیکت بزنین و بگین که دسترسی رو برای پوشه های مربوط به پروژه به صورت rw یا همون read و write قرار بدن تا مشکل برطرف بشه
این مورد هم بر طرف شده جناب مهندس
تعجبم از اینه قبل از پابلیش و اجرا بر روی لوکال به خوبی کار میکنه اما وقتی روی سرور قرار می گیره دسترسی نداره ؟
معمولا این اتفاق میفته دوست من
در سرور دسترسی به directory ها محدود هستش و نمیشه به راحتی به هر جایی دسترسی داشت
اخه قبلا پروژه رو با mvc زده بودیم بدون مشکل کار می کرد الان به core به روز رسانی کردیم در core تنظیم خاصی نیاز داره ؟
از این جهت عرض میکنم که در حال اجرا در محیط توسعه بدون مشکل اپلود میشه فایل ها ولی بر روی سرور که قرار می گیره error میده ؟
باید به پشتیبانی سرور بگین که دسترسی read و write رو به پوشه ی پروژه بده بهتون که بتونین ازش استفاده کنین
همینو گفتم . گفتن تمام دسترس ها صادر شده ..خودمم با فایل زیلا نگاه کردم اکی بود .
اگه رو لوکال هم وقتی اجرا می شد همین ارور رو میداد یه بحثی بود ولی چرا رو سرور این ارور رو میده
جناب مهندس الان یه پوشه ای رو که در هاست دانلود اصلا وجود نداره در کدهام برای اپلود فایل معرفی کردم . خیلی جالب بود . روی لوکال که اجرا کردم ارور داد که مسیر پیدا نشد ولی روی سرور که سایت اجرا شد باز این ارور رو داد
UnauthorizedAccessException: Access to the path 'C:\public_html\test\' is denied.
با وجود این که پوشه تست اصلا وجود نداره پس الان مطمئن شدم که مشکل از هاست دانلود نیست ولی مشکل کجا است خدا داند واقعا
لطفا تنظیمات موجود داخل فایل program.cs ( startup.cs ( رو ارسال کنین
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
#region config service
builder.Services.AddScoped(typeof(IGenericRepository<>), typeof(GenericRepository<>));
builder.Services.AddScoped<IUserService, UserService>();
#endregion
#region Config DataBase
builder.Services.AddDbContext<uniDbContext>(
options => options.UseSqlServer(
builder.Configuration.GetConnectionString("uniConnection")
));
#endregion
#region authentication
builder.Services.ConfigureApplicationCookie(options =>
{
options.LoginPath = "/Login";
options.LogoutPath = "/LogOff";
options.AccessDeniedPath = "/AccessDenied";
options.ExpireTimeSpan = TimeSpan.FromDays(120);
});
#endregion
#region html encoder
builder.Services.AddSingleton<HtmlEncoder>(HtmlEncoder.Create(allowedRanges: new[] { UnicodeRanges.BasicLatin, UnicodeRanges.Arabic }));
#endregion
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseStatusCodePagesWithReExecute("/{0}");
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"
);
});
app.Run();
احتمال میدم در فایل مربوط به آدرس هایی که برای آپلود فایل و یا نمایش فایل ایجاد کردیم ( Pathtools اگر اشتباه نکنم ) آدرس ها رو به اشتباه مقدار دهی کردین
لطفا این فایل رو بررسی کنین و با سورس پروژه مقایسه کنین تا مشکلی نداشته باشه
احتمالا آدرس دهی به root اصلی هستش
خیر جناب عمهندس بررسی کردم همه ادرس ها به هاست دانلود هستش ...
هر چند اگه ادرس ها اشتباهی بود وقتی برنامه روی لوکال هاست اجرا می شد . فایل ها اپلود نمی شد .. الان مشکل اینه وقتی روی سرور سایت رو اجرا می کنیم دیگه با هاست دانلود نمیتونه ارتباط برقرار کنه و الان 2 هفتس دنبال چرایی این موضوعیم
لطفا سورس پروژه رو در صورت امکان آپلود کنین تا بررسی کنم
کد های لازم برای اپلود تصویر
.

منطق برنامه..

تصاویر رو به همون سرور آپلود میکنین یا سرور دیگه؟
داخل یک سرور به خود اون نمیشه ftp زد تا جایی که بنده اطلاع دارم
به سرور دیگه (هاست دانلودم) اپلود میکنم
متن دانلود اشاره به عدم دسترسی به فایل در پروژه داره دوست من
یک نکته ای که وجود داره اینه که دستور آپلود شما در لوکال سریع عمل میکنه
ممکنه هنگام ایجاد فایل در سرور و انتقال از طریق ftp مقداری با تاخیر مواجه بشه و سیستم فایل رو پیدا نکنه
بعد از آپلود تصویر ، یک فاصله ی زمانی کوتاه در نظر بگیرید ( البته من ساختار کد شما رو نمیدونم )
والا دیگه گیج شدیم کاملا ... یعنی کد هاش هم همینه که فرستادم جناب مهندس چیز خاصی نداره..
الان تنها چیزی که امتحان نکرذیم اینه که هاست اصلی و دانلود رو از شرکت های دیگه تهیه کنیم. به نظرتون این کارم انجام بدیم؟
قبل از اینکه فایل رو به سرور دیگه ای ارسال کنین ( سرور دانلود ) ایا اون رو روی سرور اصلی ذخیره میکنین ؟
خیر جناب مهندس مستقیما میفرستم رو سرور دیگه (سرور دانلود)...
معمولا زمانی که از سرور دانلود استفاده میشه ، فایل رو ابتدا روی سرور اصلی ذخیره میکنن و بعد به سرور مقصد ارسال میکنن
احتمال اینکه فایل تا قبل از ارسال به مشکل بخوره هم وجود داره برای همین فایل رو روی سرور اصلی نگه داری میکنن و زمانی که مطمئن شدن روی سرور مقصد قرار گرفته حذف میکنن
همین کارو کردیم ولی باز به اپلود روی هاست دانلود که میرسه همان خطا رو داریم
الان یه پوشه ای رو که در هاست دانلود اصلا وجود نداره در کدهام برای اپلود فایل معرفی کردم . خیلی جالب بود . روی لوکال که اجرا کردم ارور داد که مسیر پیدا نشد ولی روی سرور که سایت اجرا شد باز این ارور رو داد
UnauthorizedAccessException: Access to the path 'C:\public_html\test\' is denied.
با وجود این که پوشه تست اصلا وجود نداره پس الان مطمئن شدم که مشکل از هاست دانلود نیست ولی مشکل کجا است خدا داند واقعا
در فایل PathTools ای که ایجاد کردین ، آدرسی که برای آپلود فایل در نظر گرفتین به آدرس پروژه اشاره میکنه یا خیر؟
گاها این مورد پیش میاد که دستور Directory.GetCurrentDirectory به درستی فراخوانی نشده و آدرس مورد نظر به پوشه ی درستی اشاره نمیکنه
جناب مهندس عوض کردم اون موضوع رو .. اصلا کد ها رو داخل بدنه نوشتم و از هیچ مسیری استفده نکردم
var FtpAddress = "ftp://194.147.158.197";
var FtpTicketImages = "/public_html/TicketImages/";
var FtpUsername = "****";
var FtpPassword = "****";
var ftpUrl = FtpAddress + FtpTicketImages + imgName;
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUrl);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(FtpUsername, FtpPassword);
using (Stream ftpStream = request.GetRequestStream())
{
imgTicket.CopyTo(ftpStream);
}وقتی کد رو دیباگ می کنم ftpurl بالا به این شکله
"ftp://194.147.158.197/public_html/TicketImages/Capture_9dca8b42-56ab-40ca-aebd-2992fcd86f3c.JPG"
اما وقتی به اررو می خوریم بر روی سرور این خطا رو داریم
unauthorizedaccessexception: access to the path 'c:\public_html\TicketImages\' is denied.
ما این جا درایو c نداریم در هاست دانلود .. این طبیعیه ؟
وقتی وارد دایرکت ادمین هم میشم به این صورت ادرس

البته دیگه نمیدونم چیو باید امتحان کنم .. پشتیبانی هاست ها هم که میگن مشکلی از طرف اونا نیست و مشکل از کد ها است . !!؟
با تشکر
اینم پاسخ پشتیبان فنی سایت !!
احتمالا در پروژه شما مسیر Absolute استفاده نموده اید به همین دلیل بر روی لوکال مشکلی ندارید اما بر روی وب به دلیل تفاوت مسیر دهی در لوکال و سرور با خطا مواجه می گردید.
لطفا با هماهنگی برنامه نویس، مسیر دهی پروژه را به صورت Relative از root هاست دانلود اصلاح نمائید.
فک کنم اصلا متوجه مشکل ما نشده است
این مشکل به سرور دانلود مربوط نمیشه دوست من
اروری که دریافت میکنین برای سایت اصلی هستش به نظر
والا دیگه بعد از 3 هفته گشتن مداوم جناب مهندس نمیدونیم چیکار کنیم
حتی هاست اصلی و دانلود رو عوض کردیم درست نشد . بازهم مون خطا رو میده
صد بار کد های بالا رو هم مرور کردیم ظاهرا درسته ... رفرنس خود مایکروسافته ...
مشکل کجا است واقعا نمیدونیم و کلافه شدیم
یه سوال
دسترسی IIS_USRS رو به پوشه ی مربوطه دادین؟
بله جناب مهندس
متاسفانه بنده هم نمیتونم به صورت قطع نظری بدم
پیشنهاد میکنم از واحد پشتیبانی فنی سایت درخواست مشاوره بگیرین تا راهنماییتون کنن