Reputation: 29
I'm creating an Excel file in C# on my asp.net web site. Then, I want to save this file somewhere within the web server's files, and send that file to the browser for the user to download.
I've got it working on my local system in the dev environment, but I'm not getting the file addressing right.
Any guidance would be much appreciated.
String outputFile = Utilities.writeToExcelFile("", MapPath(@"~\ReportFiles\TempFiles\DropShipData.xls"), table);
DownloadFile(outputFile);
public void DownloadFile(string fname)
{
string path = fname;
string name = Path.GetFileName(path);
string ext = Path.GetExtension(path);
string type = "";
// set known types based on file extension
if (ext != null)
{
switch (ext.ToLower())
{
case ".htm":
case ".html":
case ".aspx":
case ".asp":
type = "text/HTML";
break;
case ".xls":
case ".xlsx":
case ".csv":
type = "Application/x-msexcel";
break;
case ".pdf":
type = "Application/pdf";
break;
case ".txt":
type = "text/plain";
break;
case ".doc":
case ".docx":
case ".rtf":
type = "Application/msword";
break;
}
}
Response.AppendHeader("content-disposition",
"attachment; filename=" + name);
if (type != "")
Response.ContentType = type;
Response.WriteFile(path);
Response.End();
}
Again, this works fine on my local pc, but when I move it to the server I get an error for accessing the path. And the path listed in the error code is NOT where I want the file to go.
Upvotes: 1
Views: 2284
Reputation: 29755
You might also want to check and make sure that the account running the ASP.Net worker process, or the appropriate user if you're using Impersonation, has write privileges to the ReportFiles\TempFiles location. A lot of times the error occurs because the default privileges only give read access to the folders in your website.
Upvotes: 0
Reputation: 96626
First store the file:
string physicalPath = Server.MapPath("~/ParentFolder/SubFolder/file.ext");
// returns c:\path\to\website\ParentFolder\SubFolder\file.ext
Then you could for example, tell the browser to redirect to that file
Response.Redirect("~/ParentFolder/SubFolder/file.ext");
Upvotes: 3