PDA

View Full Version : لینک دانلود در ازای پرداخت در asp.net



samira soltani
چهارشنبه 03 مهر 1392, 15:05 عصر
سلام دوستان
بنده در حال ساخت یک فروشگاه آنلاین با زبان asp و دیتابیس sql server هستم.
یه مشکل بزرگی دارم
میخوام در صورتی کاربر هزینه محصولو به صورت آنلاین پرداخت کرده باشه.همون جا لیک دانلود فایل ظاهر بشه براش، فایلهایی که من میخوام تو این فروشگاه بفروشم به صورت zip شده هست.
خواهشا اگه کسی پیشنهادی داره کمکم کنه
با تشکر

amin750
چهارشنبه 03 مهر 1392, 15:45 عصر
خوب وقتی پرداختش انجام شد redirect اش کن به لینک دانلود

samira soltani
چهارشنبه 03 مهر 1392, 17:45 عصر
آخه من میخوام به صورت خودکار لینک دانلود ظاهر بشه و لینک دانلود برای هر کاربر متفاوت باشه
با تشکر

zerocool151
پنج شنبه 04 مهر 1392, 10:39 صبح
برای مجوز دادن به کاربر برای دانلود فایل از role استفاده کن
اون لینکت رو بزار تو یه panel و visible=false کن و پس از اینکه پرداخت کرد visible=true کن دیگه

بهنام صناعی
پنج شنبه 04 مهر 1392, 15:39 عصر
سلام
اینکه لینک فایل رو مخفی کنید و بعد وقتی کاربر پرداخت کرد اون رو نمایش بدید ایده ی جالبی نیست. کافیه کاربر اون لینک رو کپی کنه و توی وبلاگ خودش قرار بده تا دیگران هم بتونند دانلود کنند :)

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

این عملیات رو می تونید با استفاده از HttpHandler مدیریت کنید. برای ایجاد یک HttpHandler ساده ترین راه استفاده از Generic Handler ها یا همون فایل های با پسوند ashx هست. کافیه یکی از این فایل ها به برنامتون اضافه کنید. محتوای این فایل در ابتدا چیزی شبیه به این هست:


<%@ WebHandler Language="C#‎‎‎‎" Class="Handler" %>

using System;
using System.Web;

public class Handler : IHttpHandler {

public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.Write("Hello World");
}

public bool IsReusable {
get {
return false;
}
}

}

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

به طور مثال کد زیر می تونه فایل مورد نظر شما رو بخونه و برای کاربر ارسال کنه. در صورتی فرض کنیم آدرس فایل زیپ در سایت شما files/sample.zip/~ باشه این کد فایل رو برای کاربر ارسال می کنه:


public void ProcessRequest (HttpContext context) {
string fullFileName = context.Server.MapPath("~/files/sample.zip");
System.IO.FileInfo toDownload = new System.IO.FileInfo(fullFileName);
if (toDownload.Exists)
{
context.Response.Clear();
context.Response.ContentType = "application/zip";
context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + toDownload.Name);
context.Response.AppendHeader("Content-Length", toDownload.Length.ToString());
context.Response.TransmitFile(fullFileName);
context.ApplicationInstance.CompleteRequest();
}
}

حالا کافیه موقع پرداخت شناسه ای رو در دیتابیس به همراه زمان تولید اون شناسه ذخیره کنید و این شناسه رو در کوئری استرینگ به همراه درخواست به این تابع پاس بدید. در این تابع بررسی کنید در صورتی که چنین شناسه ای موجود هست و زمان تولیدش هم مثلا از یک ساعت کمتر هست فایل رو برای کاربر ارسال کنید و در غیر این صورت یک پیغام خطا نمایش بدید. برای کاربران عضو هم کافیه مشخصات کلیه ی فایل هایی که خریداری کردند رو در پروفایلشون ذخیره کنید هر موقع که لازم بود بتونند اونها رو دانلود کنند.

موفق باشید

samira soltani
چهارشنبه 10 مهر 1392, 16:53 عصر
ممنون دوست خوبم، خیلی لطف کردید.:چشمک: