PDA

View Full Version : سوال: دانلود فایل(فوری)



Mohammad_dn
سه شنبه 29 بهمن 1392, 21:42 عصر
من از دستور زیر برای دانلود فایل استفاده میکنم


Response.Buffer = true;
Response.Clear();
Response.AddHeader(
"content-disposition",
"attachement; filename=" + strFileName);
Response.ContentType = strFileType;
Response.WriteFile(
"~/" + strFileAdd);


تنها مشکلی که داره اینه که قابلیت Resume دانلود غیر فعال میشه

چطور باید فعالش کنم؟؟؟؟:متفکر::متفکر::متفکر: :متفکر:

Mohammad_dn
چهارشنبه 30 بهمن 1392, 13:27 عصر
واقعا کسی توی این تالار جواب این سوالو نمیدونه؟؟؟؟واقعا این تالار به فنا رفته:اشتباه::عصبانی++:

متاسفم برای این تالار

VRAnonymous
چهارشنبه 30 بهمن 1392, 14:36 عصر
public static bool DownloadFileMethod(HttpContext httpContext, string filePath, long speed)
{
// Many changes: mostly declare variables near use
// Extracted duplicate references to HttpContext.Response and .Request
// also duplicate reference to .HttpMethod

// Removed try/catch blocks which hid any problems
var response = httpContext.Response;
var request = httpContext.Request;
var method = request.HttpMethod.ToUpper();
if (method != "GET" &&
method != "HEAD")
{
response.StatusCode = 501;
return false;
}

if (!File.Exists(filePath))
{
response.StatusCode = 404;
return false;
}

// Stream implements IDisposable so should be in a using block
using (var myFile = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var fileLength = myFile.Length;
if (fileLength > Int32.MaxValue)
{
response.StatusCode = 413;
return false;
}

var lastUpdateTiemStr = File.GetLastWriteTimeUtc(filePath).ToString("r");
var fileName = Path.GetFileName(filePath);
var fileNameUrlEncoded = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
var eTag = fileNameUrlEncoded + lastUpdateTiemStr;

var ifRange = request.Headers["If-Range"];
if (ifRange != null && ifRange.Replace("\"", "") != eTag)
{
response.StatusCode = 412;
return false;
}

long startBytes = 0;

// Just guessing, but I bet you want startBytes calculated before
// using to calculate content-length
var rangeHeader = request.Headers["Range"];
if (rangeHeader != null)
{
response.StatusCode = 206;
var range = rangeHeader.Split(new[] {'=', '-'});
startBytes = Convert.ToInt64(range[1]);
if (startBytes < 0 || startBytes >= fileLength)
{
// TODO: Find correct status code
response.StatusCode = (int) HttpStatusCode.BadRequest;
response.StatusDescription =
string.Format("Invalid start of range: {0}", startBytes);
return false;
}
}

response.Clear();
response.Buffer = false;
response.AddHeader("Content-MD5", GetMD5Hash(filePath));
response.AddHeader("Accept-Ranges", "bytes");
response.AppendHeader("ETag", string.Format("\"{0}\"", eTag));
response.AppendHeader("Last-Modified", lastUpdateTiemStr);
response.ContentType = "application/octet-stream";
response.AddHeader("Content-Disposition", "attachment;filename=" +
fileNameUrlEncoded.Replace("+", "%20"));
var remaining = fileLength - startBytes;
response.AddHeader("Content-Length", remaining.ToString());
response.AddHeader("Connection", "Keep-Alive");
response.ContentEncoding = Encoding.UTF8;

if (startBytes > 0)
{
response.AddHeader("Content-Range",
string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));
}

// BinaryReader implements IDisposable so should be in a using block
using (var br = new BinaryReader(myFile))
{
br.BaseStream.Seek(startBytes, SeekOrigin.Begin);

const int packSize = 1024*10; //read in block,every block 10K bytes
var maxCount = (int) Math.Ceiling((remaining + 0.0)/packSize); //download in block
for (var i = 0; i < maxCount && response.IsClientConnected; i++)
{
response.BinaryWrite(br.ReadBytes(packSize));
response.Flush();

// HACK: Unexplained sleep
var sleep = (int) Math.Ceiling(1000.0*packSize/speed); //the number of millisecond
if (sleep > 1) Thread.Sleep(sleep);
}
}
}
return true;
}


ببین این کمکت میکنه

VRAnonymous
چهارشنبه 30 بهمن 1392, 14:37 عصر
ببین این کمکت میکنه

Mohammad_dn
چهارشنبه 30 بهمن 1392, 15:01 عصر
خدا رو شکر
اووو یعنی برای فعال کردن یک دانه ریزوم نیازه این همه کد نوشت یا این کد چیزای اظافی هم داره؟؟؟؟

Mohammad_dn
چهارشنبه 30 بهمن 1392, 15:37 عصر
خوب میشه یه توضیح بدید؟؟؟؟من که هر کاری کردم کار نکرد...:افسرده:

VRAnonymous
چهارشنبه 30 بهمن 1392, 22:07 عصر
از stack overflow اینو گرفتم
کاربرای زیادی بهش rate داده بودن
خودم که خوندم چیزی جز resume نداشت
فقط موقع serve کردن یه فایل واسه دانلود حواست خیلی به امنیت کار باشه.امکان خوندن web.config توی این حالت زیاده

Mohammad_dn
چهارشنبه 30 بهمن 1392, 22:14 عصر
فقط موقع serve کردن یه فایل واسه دانلود حواست خیلی به امنیت کار باشه.امکان خوندن web.config توی این حالت زیاده
یعنی چی؟؟بیشتر توضیح بدید لطفا

VRAnonymous
پنج شنبه 01 اسفند 1392, 09:35 صبح
تو حالت force download چون داری فایل رو کاملا روی صفحه برای کاربر قرار میدی امکان خوندن فایل های حیاطی وجود داره
اگر اسم فایلت به ورودی کاربر بستگی داره ، مثلا تو کد خودت : strFileAdd رو اگر از ورودی کاربر میگیری و کاربر web.config رو وارد کنه چه اتفاقی میافته؟

Mohammad_dn
پنج شنبه 01 اسفند 1392, 17:51 عصر
نه من از ورودی نام فایل رو نمیگیریم.....من یه چیزی شبیه به این میگیرم:f0kdiqvk3jbabapc1ps1zomy389016 .... که در واقع شناسه ی یه فایل هست

fakhravari
پنج شنبه 01 اسفند 1392, 22:50 عصر
http://barnamenevis.org/showthread.php?315870-Resume-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%D8%A8%D9%87-%D8%B5%D9%88%D8%B1%D8%AA-%D9%85%D8%B3%D8%AA%D9%82%DB%8C%D9%85&highlight=Resume