giaspirit
سه شنبه 05 فروردین 1393, 13:46 عصر
با سلام خدمت همه دوستان عزیز و عرض تبریک سال نو
یک کد شمارنده دانلود فایل نوشتم که متاسفانه در مرورگر Chrome فقط به درستی کار میکنه و در مرورگرهای Firefox، Opera، IE متاسفانه تعداد دانلود رو بیشتر از یک واحد در هر بار افزایش میده، مثلا گاهی در FF تا 5 بار با یک کلیک کاربر به تعداد دانلود اضافه میکنه و همینطور در Opera و IE.
<asp:HyperLink ID="NewsImageHL" runat="server" NavigateUrl='<%#string.Format("DownloadHandler.ashx?FileCode={0}&DownloadLink={1}",Eval("FileCode"),Server.MapPath("~/HighSchool/Files/") + Eval("FileName")) %>' Text='<%# "دانلود فایل" + "(" +Eval("DownloadNum") + ")" %>' ></asp:HyperLink>
<%@ WebHandler Language="C#" Class="DownloadHandler" %>
using System;
using System.IO;
using System.Web;
/// <summary>
/// افزودن شمارش دانلود فایل
/// </summary>
public class DownloadHandler : IHttpHandler {
public void ProcessRequest(HttpContext context)
{
int FileCode;
int.TryParse(context.Request.QueryString["FileCode"], out FileCode);
IncrementCounter(FileCode);
SendFileToUser(context,FileCode);
}
public bool IsReusable
{
get { return true; }
}
/// <summary>
/// ارسال فایل برای کاربر
/// </summary>
/// <param name="context">The <see cref="HttpContext"/> that
/// contains the request.</param>
private void SendFileToUser(HttpContext context,int FileCode)
{
var filePath = context.Request.QueryString["DownloadLink"]; //you know where your files are
var file = new FileInfo(filePath);
if (FileCode == null || FileCode == 0) return;
//return the file
context.Response.Clear();
//context.Response.Buffer = false;
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Length", file.Length.ToString());
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
context.Response.WriteFile(file.FullName);
context.ApplicationInstance.CompleteRequest();
context.Response.Flush();
context.Response.End();
}
/// <summary>
/// افزودن شمارنده
/// </summary>
/// <param name="context">The <see cref="HttpContext"/> that contains t
/// he current request</param>
private void IncrementCounter(int FileCode)
{
try
{
COM.DownloadFileCounter(FileCode);
}
catch (Exception ex)
{
throw (ex);
}
}
}
COM Class
public static void DownloadFileCounter(long FileCode)
{
DataConnction.ExecuteNonQuery("Update FilesTB set DownloadNum=DownloadNum+1 where FileCode='" + FileCode + "' ");
}
DataConnection Class
public static void ExecuteNonQuery(string Query)
{
var Con = new SqlConnection
{
ConnectionString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString
};
Con.Open();
var Com = new SqlCommand(Query,Con);
Com.ExecuteNonQuery();
Con.Close();
Con.Dispose();
}
با تشکر از همه دوستان
یک کد شمارنده دانلود فایل نوشتم که متاسفانه در مرورگر Chrome فقط به درستی کار میکنه و در مرورگرهای Firefox، Opera، IE متاسفانه تعداد دانلود رو بیشتر از یک واحد در هر بار افزایش میده، مثلا گاهی در FF تا 5 بار با یک کلیک کاربر به تعداد دانلود اضافه میکنه و همینطور در Opera و IE.
<asp:HyperLink ID="NewsImageHL" runat="server" NavigateUrl='<%#string.Format("DownloadHandler.ashx?FileCode={0}&DownloadLink={1}",Eval("FileCode"),Server.MapPath("~/HighSchool/Files/") + Eval("FileName")) %>' Text='<%# "دانلود فایل" + "(" +Eval("DownloadNum") + ")" %>' ></asp:HyperLink>
<%@ WebHandler Language="C#" Class="DownloadHandler" %>
using System;
using System.IO;
using System.Web;
/// <summary>
/// افزودن شمارش دانلود فایل
/// </summary>
public class DownloadHandler : IHttpHandler {
public void ProcessRequest(HttpContext context)
{
int FileCode;
int.TryParse(context.Request.QueryString["FileCode"], out FileCode);
IncrementCounter(FileCode);
SendFileToUser(context,FileCode);
}
public bool IsReusable
{
get { return true; }
}
/// <summary>
/// ارسال فایل برای کاربر
/// </summary>
/// <param name="context">The <see cref="HttpContext"/> that
/// contains the request.</param>
private void SendFileToUser(HttpContext context,int FileCode)
{
var filePath = context.Request.QueryString["DownloadLink"]; //you know where your files are
var file = new FileInfo(filePath);
if (FileCode == null || FileCode == 0) return;
//return the file
context.Response.Clear();
//context.Response.Buffer = false;
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Length", file.Length.ToString());
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
context.Response.WriteFile(file.FullName);
context.ApplicationInstance.CompleteRequest();
context.Response.Flush();
context.Response.End();
}
/// <summary>
/// افزودن شمارنده
/// </summary>
/// <param name="context">The <see cref="HttpContext"/> that contains t
/// he current request</param>
private void IncrementCounter(int FileCode)
{
try
{
COM.DownloadFileCounter(FileCode);
}
catch (Exception ex)
{
throw (ex);
}
}
}
COM Class
public static void DownloadFileCounter(long FileCode)
{
DataConnction.ExecuteNonQuery("Update FilesTB set DownloadNum=DownloadNum+1 where FileCode='" + FileCode + "' ");
}
DataConnection Class
public static void ExecuteNonQuery(string Query)
{
var Con = new SqlConnection
{
ConnectionString = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString
};
Con.Open();
var Com = new SqlCommand(Query,Con);
Com.ExecuteNonQuery();
Con.Close();
Con.Dispose();
}
با تشکر از همه دوستان