473,383 Members | 1,880 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,383 software developers and data experts.

Content-Disposition Doesn't Set Filename in IE

Jed
I have looked everywhere and cannot find a resolution for this. I have read
several post on this forum that allude to similar issues but I have not found
a solution.

I am sending dynamic content to the browser to be opened in Excel. On some
browsers including on the mac it works fine, but in other browsers it sets
the filename to the script instead of to the name specified in the
content-disposition.

I am at my wits end. Here is a snapshot of my code, but I have tried dozens
of permutations. It works on my local machine but not on the server. The
server is running under HTTPS which may be an issue? I have tried without
and with the mime type defined in the IIS on the server. The request is
launched from a javascript window.open and I have tried both relative and
absolute urls.

FYI: this is part of a function and the context is the current httpcontext.
I am doing all this from an HttpHandler with session state enabled.

XslTransform xslt = new XslTransform();
xslt.Load(xslPath);
System.IO.MemoryStream stream = new System.IO.MemoryStream();
xslt.Transform(xmlDocument, xargs, stream, new XmlUrlResolver());
context.Response.Buffer = true;
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Cookies.Clear();
context.Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
//string.Empty;
context.Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
context.Response.AppendHeader("Content-Length", stream.Length.ToString());
//context.Response.AppendHeader("Content-Disposition-Type","inline");
//context.Response.AppendHeader("Pragma","cache");
//context.Response.AppendHeader("Expires", "-1");
//context.Response.AppendHeader("Cache-Control","no-store, no-cache,
must-revalidate, post-check=0, pre-check=0");
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AppendHeader("Content-Disposition",
"inline; " +
"filename=\"" + "Download.xls" + "\"; " +
"size=" + stream.Length.ToString() + "; " +
"creation-date=" + DateTime.Now.ToString("R") + "; " +
"modification-date=" + DateTime.Now.ToString("R") + "; " +
"read-date=" + DateTime.Now.ToString("R"));
context.Response.BinaryWrite(stream.ToArray());
stream.Close();
context.Response.Flush();
context.Response.Close();
stream = null;
context.Response.End();

Nov 19 '05 #1
4 2291
well its up to the browser to honor the content file name. as you found,
many don't. you have two options:

1) live with it.
2) use an http module, and use url remapping to get around the problem, so
that

Download.xls get remapped to producexml.aspx
-- bruce (sqlwork.com)

..

"Jed" <Je*@discussions.microsoft.com> wrote in message
news:52**********************************@microsof t.com...
I have looked everywhere and cannot find a resolution for this. I have
read
several post on this forum that allude to similar issues but I have not
found
a solution.

I am sending dynamic content to the browser to be opened in Excel. On
some
browsers including on the mac it works fine, but in other browsers it sets
the filename to the script instead of to the name specified in the
content-disposition.

I am at my wits end. Here is a snapshot of my code, but I have tried
dozens
of permutations. It works on my local machine but not on the server. The
server is running under HTTPS which may be an issue? I have tried without
and with the mime type defined in the IIS on the server. The request is
launched from a javascript window.open and I have tried both relative and
absolute urls.

FYI: this is part of a function and the context is the current
httpcontext.
I am doing all this from an HttpHandler with session state enabled.

XslTransform xslt = new XslTransform();
xslt.Load(xslPath);
System.IO.MemoryStream stream = new System.IO.MemoryStream();
xslt.Transform(xmlDocument, xargs, stream, new XmlUrlResolver());
context.Response.Buffer = true;
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Cookies.Clear();
context.Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
//string.Empty;
context.Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
context.Response.AppendHeader("Content-Length", stream.Length.ToString());
//context.Response.AppendHeader("Content-Disposition-Type","inline");
//context.Response.AppendHeader("Pragma","cache");
//context.Response.AppendHeader("Expires", "-1");
//context.Response.AppendHeader("Cache-Control","no-store, no-cache,
must-revalidate, post-check=0, pre-check=0");
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AppendHeader("Content-Disposition",
"inline; " +
"filename=\"" + "Download.xls" + "\"; " +
"size=" + stream.Length.ToString() + "; " +
"creation-date=" + DateTime.Now.ToString("R") + "; " +
"modification-date=" + DateTime.Now.ToString("R") + "; " +
"read-date=" + DateTime.Now.ToString("R"));
context.Response.BinaryWrite(stream.ToArray());
stream.Close();
context.Response.Flush();
context.Response.Close();
stream = null;
context.Response.End();

Nov 19 '05 #2
Jed
Thanks, Bruce,

Maybe that is what I should do. Can you explain why it works in my local
development environment but not on the live server?

Obviously, the browser is the same in both contexts.

Thanks again.

"Bruce Barker" wrote:
well its up to the browser to honor the content file name. as you found,
many don't. you have two options:

1) live with it.
2) use an http module, and use url remapping to get around the problem, so
that

Download.xls get remapped to producexml.aspx
-- bruce (sqlwork.com)

..

"Jed" <Je*@discussions.microsoft.com> wrote in message
news:52**********************************@microsof t.com...
I have looked everywhere and cannot find a resolution for this. I have
read
several post on this forum that allude to similar issues but I have not
found
a solution.

I am sending dynamic content to the browser to be opened in Excel. On
some
browsers including on the mac it works fine, but in other browsers it sets
the filename to the script instead of to the name specified in the
content-disposition.

I am at my wits end. Here is a snapshot of my code, but I have tried
dozens
of permutations. It works on my local machine but not on the server. The
server is running under HTTPS which may be an issue? I have tried without
and with the mime type defined in the IIS on the server. The request is
launched from a javascript window.open and I have tried both relative and
absolute urls.

FYI: this is part of a function and the context is the current
httpcontext.
I am doing all this from an HttpHandler with session state enabled.

XslTransform xslt = new XslTransform();
xslt.Load(xslPath);
System.IO.MemoryStream stream = new System.IO.MemoryStream();
xslt.Transform(xmlDocument, xargs, stream, new XmlUrlResolver());
context.Response.Buffer = true;
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Cookies.Clear();
context.Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
//string.Empty;
context.Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
context.Response.AppendHeader("Content-Length", stream.Length.ToString());
//context.Response.AppendHeader("Content-Disposition-Type","inline");
//context.Response.AppendHeader("Pragma","cache");
//context.Response.AppendHeader("Expires", "-1");
//context.Response.AppendHeader("Cache-Control","no-store, no-cache,
must-revalidate, post-check=0, pre-check=0");
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AppendHeader("Content-Disposition",
"inline; " +
"filename=\"" + "Download.xls" + "\"; " +
"size=" + stream.Length.ToString() + "; " +
"creation-date=" + DateTime.Now.ToString("R") + "; " +
"modification-date=" + DateTime.Now.ToString("R") + "; " +
"read-date=" + DateTime.Now.ToString("R"));
context.Response.BinaryWrite(stream.ToArray());
stream.Close();
context.Response.Flush();
context.Response.Close();
stream = null;
context.Response.End();


Nov 19 '05 #3
Jed
OK,

I went with the extension mapping option and it doesn't work.

I mapped the xls extension and am handling it with an HttpHandler. It
behaves exactly the same as running it through an aspx. It works locally
where there is no SSL but it doesn't work on the server where the request is
secured. So even though the "file" has the xls extension, it still won't
download.

I don't think it is an MSOffice issue, I think it is a security issue. I
have seen unanswered posts about Cacheability having an effect, but I have
seen no answers on the subject.

I am stumped.

"Bruce Barker" wrote:
well its up to the browser to honor the content file name. as you found,
many don't. you have two options:

1) live with it.
2) use an http module, and use url remapping to get around the problem, so
that

Download.xls get remapped to producexml.aspx
-- bruce (sqlwork.com)

..

"Jed" <Je*@discussions.microsoft.com> wrote in message
news:52**********************************@microsof t.com...
I have looked everywhere and cannot find a resolution for this. I have
read
several post on this forum that allude to similar issues but I have not
found
a solution.

I am sending dynamic content to the browser to be opened in Excel. On
some
browsers including on the mac it works fine, but in other browsers it sets
the filename to the script instead of to the name specified in the
content-disposition.

I am at my wits end. Here is a snapshot of my code, but I have tried
dozens
of permutations. It works on my local machine but not on the server. The
server is running under HTTPS which may be an issue? I have tried without
and with the mime type defined in the IIS on the server. The request is
launched from a javascript window.open and I have tried both relative and
absolute urls.

FYI: this is part of a function and the context is the current
httpcontext.
I am doing all this from an HttpHandler with session state enabled.

XslTransform xslt = new XslTransform();
xslt.Load(xslPath);
System.IO.MemoryStream stream = new System.IO.MemoryStream();
xslt.Transform(xmlDocument, xargs, stream, new XmlUrlResolver());
context.Response.Buffer = true;
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Cookies.Clear();
context.Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
//string.Empty;
context.Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
context.Response.AppendHeader("Content-Length", stream.Length.ToString());
//context.Response.AppendHeader("Content-Disposition-Type","inline");
//context.Response.AppendHeader("Pragma","cache");
//context.Response.AppendHeader("Expires", "-1");
//context.Response.AppendHeader("Cache-Control","no-store, no-cache,
must-revalidate, post-check=0, pre-check=0");
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AppendHeader("Content-Disposition",
"inline; " +
"filename=\"" + "Download.xls" + "\"; " +
"size=" + stream.Length.ToString() + "; " +
"creation-date=" + DateTime.Now.ToString("R") + "; " +
"modification-date=" + DateTime.Now.ToString("R") + "; " +
"read-date=" + DateTime.Now.ToString("R"));
context.Response.BinaryWrite(stream.ToArray());
stream.Close();
context.Response.Flush();
context.Response.Close();
stream = null;
context.Response.End();


Nov 19 '05 #4
Jed
Well, I think I have it resolved, though I am not sure what of the following
fixed it.

Here are a couple useful resource links:
http://support.microsoft.com/?kbid=317208
http://www.generation.net/~hleboeuf/downfile.htm

Here is the header code:
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.Cookies.Clear();
context.Response.Cache.SetCacheability(HttpCacheab ility.Private);
context.Response.CacheControl = "private";
context.Response.Charset = System.Text.UTF8Encoding.UTF8.WebName;
context.Response.ContentEncoding = System.Text.UTF8Encoding.UTF8;
context.Response.AppendHeader("Content-Length", stream.Length.ToString());
context.Response.AppendHeader("Pragma","cache");
context.Response.AppendHeader("Expires", "60");
context.Response.ContentType = "application/vnd.ms-excel";
context.Response.AppendHeader("Content-Disposition",
"inline; " +
"filename=\"" + fileName + "\"; " +
"size=" + stream.Length.ToString() + "; " +
"creation-date=" + DateTime.Now.ToString("R") + "; " +
"modification-date=" + DateTime.Now.ToString("R") + "; " +
"read-date=" + DateTime.Now.ToString("R"));

According to the KB article above, Office cannot open files that have not
been cached by IE. I changed the cache settings to accommodate this
"limitation". Though the following may have been enough.

One of the Advanced settings in the IE options is "Do not save encrypted
pages to disk" I had this option checked and I believe this is why neither
download (attachment) nor open (inline) worked for me in HTTPS/SSL but did
work for others.

Nov 19 '05 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

12
by: jonathan.beckett | last post by:
Hi All, For the past few months I have been working on an open source Apache/PHP/MySQL content management system - and have recently made it available for download. It's still very much a...
0
by: jonathan.beckett | last post by:
Hi All, I have just made version 0.4.8 of the PluggedOut CMS Content Management System available for download - it's free, and covered by the GPL. It's still very much a work in progress...
0
by: Scott Abel | last post by:
For immediate release: The Rockley Group Content Management Workshop Series Coming to Atlanta, Seattle, Vancouver, Chicago, Washington, DC, Toronto, and Research Triangle Park Learn more:...
10
by: clintonG | last post by:
Can somebody direct me to documents or source that supports the use of collapsible content that is collapsed by default when the page is loaded? The secondary objective would of course be...
1
by: CloudSolutions | last post by:
Introduction: For many beginners and individual users, requiring a credit card and email registration may pose a barrier when starting to use cloud servers. However, some cloud server providers now...
0
by: Faith0G | last post by:
I am starting a new it consulting business and it's been a while since I setup a new website. Is wordpress still the best web based software for hosting a 5 page website? The webpages will be...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 3 Apr 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome former...
0
by: ryjfgjl | last post by:
In our work, we often need to import Excel data into databases (such as MySQL, SQL Server, Oracle) for data analysis and processing. Usually, we use database tools like Navicat or the Excel import...
0
by: taylorcarr | last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: aa123db | last post by:
Variable and constants Use var or let for variables and const fror constants. Var foo ='bar'; Let foo ='bar';const baz ='bar'; Functions function $name$ ($parameters$) { } ...
0
by: ryjfgjl | last post by:
If we have dozens or hundreds of excel to import into the database, if we use the excel import function provided by database editors such as navicat, it will be extremely tedious and time-consuming...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.