В общем как сделать правильный нетяжёлый для сервера слив файлов
я насобирал разных советов и родил такое, но оно под IE вообще не работает, а под остальными работает как-то неправильно, нет процедуры закачки как таковой
чувствую это порно, не тот метод, хотя в инете его почему-то используют
string path = Server.MapPath(/*путьььььььь*/);
System.IO.FileInfo fi = new FileInfo(path);
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", Path.GetFileName(path)));
Response.AddHeader("Content-Length", fi.Length.ToString());
long sent = 0;
long left = fi.Length;
while(left > 0)
{
if(Context.Response.IsClientConnected)
{
long block = 1024;
if(left < 1024)
{
block = left;
}
Response.WriteFile(path, sent, block);
Response.Flush();
sent += block;
left -= block;
}
}
Response.End();
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
а зачем вы кусками сливаете файл? передавайте сразу весь, а об остальном пускай браузер парится.
Здравствуйте, Kingofastellarwar, Вы писали:
K>В общем как сделать правильный нетяжёлый для сервера слив файлов
K>я насобирал разных советов и родил такое, но оно под IE вообще не работает, а под остальными работает как-то неправильно, нет процедуры закачки как таковой
K>чувствую это порно, не тот метод, хотя в инете его почему-то используют
K>K>string path = Server.MapPath(/*путьььььььь*/);
K>System.IO.FileInfo fi = new FileInfo(path);
K>Response.Clear();
K>Response.ContentType = "application/octet-stream";
K>Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", Path.GetFileName(path)));
K>Response.AddHeader("Content-Length", fi.Length.ToString());
K>long sent = 0;
K>long left = fi.Length;
K>while(left > 0)
K>{
K> if(Context.Response.IsClientConnected)
K> {
K> long block = 1024;
K> if(left < 1024)
K> {
K> block = left;
K> }
K> Response.WriteFile(path, sent, block);
K> Response.Flush();
K> sent += block;
K> left -= block;
K> }
K>}
K>Response.End();
K>
или уж пиши из файлового потока в выходной поток с буфером не менее 64к, или смотри в сторону HttpResponse.TransmitFile