-
دانلود فایل
:43: با سلام خدمت اساتید ودوستانم.
یک سوال داشتم ؟ من می خوام یک وب طراحی کنم که در ان تعدادی فایل pdf برای دانلود گذاشتم ولی وقتی بر روی آن کلیک می کنم فایل باز می شود ولی عمل دانلود و یاذخیره فایل را انجام نمی دهد . ممنون می شوم در این باره من تازه کار را راهنمایی کنید .(درasp.net با c#)
و اگر هم کد خاصی دارد ممنون می شوم بهم بدین.
-
سلام
کد زیر را با نام فایل Download.ashx به پروژه تان اضافه کنید.
کد:
<%@ WebHandler Language="VB" Class="Download" %>
Public Class Download
Implements System.Web.IHttpHandler
Private Const DOWNLOADFOLDER As String = "~\Downloads\"
Public Sub ProcessRequest(ByVal context As HttpContext) Implements System.Web.IHttpHandler.ProcessRequest
Dim filename As String = context.Request.QueryString("f")
If String.IsNullOrEmpty(filename) Then Return
context.Request.ContentType = "application/pdf"
context.Response.AppendHeader("content-disposition", "attachment; filename=" & filename)
context.Response.TransmitFile(DOWNLOADFOLDER & filename)
End Sub
ReadOnly Property IsReusable() As Boolean Implements System.Web.IHttpHandler.IsReusable
Get
Return True
End Get
End Property
End Class
پوشه ای به نام Downloads در root بسازید و فایلهای pdf تان رادر آن برزید و به جای لین عادی و مستقیم به pdf ها لینک زیر را بدهید.
کد:
www.site.com/Downloads.ashx?f=Filename.pdf
این کد کار میکند، ولی پیشنهاد میکنم هم برای صرفه جویی در فضا و هم سرعت بالاتر دانلود، فایلهایتان را به جای pdf با فرمت zip یا rar عرضه کنید.
-
سلام
من کدهای فوق را جهت نمونه گذاشتم، تا خودتان بسته به نیازتان اصلاح کنید.
ولی از دیشب تا حال هر چه فکر کردم، دیدم که شما احتمالاً متوجه یک ضعف امنیتی در کدهای فوق نمیشوید و کد فوق را یکراست استفاده خواهید کرد، دلم نیامد این ضعف را متذکر نشوم.
به عنوان یک رویکرد ساده و موثر شما میتوانید ورودی یک سری کاراکتر خاصل را ببندید مثلاً کد If موجود را چنین اصلاح کنید.
کد:
If String.IsNullOrEmpty(filename) OrElse (filename.IndexOfAny(New Char() {"\"c, "/"c}) >= 0) OrElse (filename.IndexOf("..", System.StringComparison.Ordinal) >= 0) Then Return
و اگر فقط قرار است pdf را اینگونه عرضه کنید، چه بعتر که از شرط زیر استفاده کنید.
کد:
If String.IsNullOrEmpty(filename) OrElse (filename.IndexOfAny(New Char() {"\"c, "/"c}) >= 0) OrElse (filename.IndexOf("..", System.StringComparison.Ordinal) >= 0) OrElse (Not filename.EndsWith(".pdf", System.StringComparison.OrdinalIgnoreCase)) Then Return
البته میتوانید به جای یک دستور ساده Return ، اقدام به چاپ یک متن توضیحی هم و اطلاع دهنده هم بکنید.
-
aghay h2 ek donya mamnoonmkhoda khiret bedeh