حفظ ملف علي الكمبيوتر save file in asp.net

حفظ ملف علي الكمبيوتر save file in asp.net

المستوي الثالث مبرمج متوسط


حفظ ملف علي الكمبيوتر save file in asp.net

submit to reddit

حفظ ملف علي الكمبيوتر save file in asp.net

 

بعد ان قمت برفع الملفات الي السيرفر بشكل جيد والان تريد ان يضغط العميل علي اي ملف يحفظه علي الكمبيوتر الخاص بيه

حفظ ملف علي الكمبيوتر save file in asp.net

سوف نصنع 2 فانكشن ضعهم كما هم ولا تعدل بهم شئ ..ثم اخير سوف نضع كود ثالث ينفذ ماسبق وسوف نمرر له بارمتر

1- فانكشن اولي

 

private void fileDownload(string fileName, string fileUrl)
{
Page.Response.Clear();
bool success = ResponseFile(Page.Request, Page.Response, fileName, fileUrl, 1024000);
if (!success)
Response.Write("Downloading Error!");
Page.Response.End();

}

2- فانكشن ثانية

public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)
{
try
{
FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
BinaryReader br = new BinaryReader(myFile);
try
{
_Response.AddHeader("Accept-Ranges", "bytes");
_Response.Buffer = false;
long fileLength = myFile.Length;
long startBytes = 0;

int pack = 10240; //10K bytes
int sleep = (int)Math.Floor((double)(1000 * pack / _speed)) + 1;
if (_Request.Headers["Range"] != null)
{
_Response.StatusCode = 206;
string[] range = _Request.Headers["Range"].Split(new char[] { '=', '-' });
startBytes = Convert.ToInt64(range[1]);
}
_Response.AddHeader("Content-Length", (fileLength - startBytes).ToString());
if (startBytes != 0)
{
_Response.AddHeader("Content-Range", string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));
}
_Response.AddHeader("Connection", "Keep-Alive");
_Response.ContentType = "application/octet-stream";
_Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));

br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
int maxCount = (int)Math.Floor((double)((fileLength - startBytes) / pack)) + 1;

for (int i = 0; i < maxCount; i++)
{
if (_Response.IsClientConnected)
{
_Response.BinaryWrite(br.ReadBytes(pack));
Thread.Sleep(sleep);
}
else
{
i = maxCount;
}
}
}
catch
{
return false;
}
finally
{
br.Close();
myFile.Close();
}
}
catch
{
return false;
}
return true;
}

 

3- فانكشن نضع بها متغيرات مرسلة من صفحة اخري


وفي ال page load
استدعي فنكشن

 
fileDownload(filename, Server.MapPath("/upload/" + filename));

upload هذا فولدر تخزن فيه الملفات التي ترفعها
file name هو اسم الملف .. وذلك بعد ان ترسل اسمه للصفحة