我正在为我的网站使用免费 MS Azure虚拟网络服务器。
在我的开发机器上,我可以成功创建一个CSV文件,将其保存到相对临时目录,然后将其下载到浏览器客户端。
但是,当我从Azure站点运行它时,我收到以下错误:
System.IO.DirectoryNotFoundException:找不到部分内容 路径'D:\ home \ site \ wwwroot \ temp \ somefile.csv'。
Azure网站的免费版本阻止我们将文件保存到磁盘吗?如果没有,我们在哪里可以创建/保存我们即时生成的文件?
代码示例
private FilePathResult SaveVolunteersToCsvFile(List<Volunteer> volunteers)
{
string virtualPathToDirectory = "~/temp";
string physicalPathToDirectory = Server.MapPath(virtualPathToDirectory);
string fileName = "Volunteers.csv";
string pathToFile = Path.Combine(physicalPathToDirectory, fileName);
StringBuilder sb = new StringBuilder();
// Column Headers
sb.AppendLine("First Name,Last Name,Phone,Email,Approved,Has Background Check");
// CSV Rows
foreach (var volunteer in volunteers)
{
sb.AppendLine(string.Format("{0},{1},{2},{3},{4},{5},{6}",
volunteer.FirstName, volunteer.LastName, volunteer.MobilePhone.FormatPhoneNumber(), volunteer.EmailAddress, volunteer.IsApproved, volunteer.HasBackgroundCheckOnFile));
}
using (StreamWriter outfile = new StreamWriter(pathToFile))
{
outfile.Write(sb.ToString());
}
return File(Server.MapPath(virtualPathToDirectory + "/" + fileName), "text/csv", fileName);
}
答案 0 :(得分:2)
确保~/temp
文件夹已发布到服务器,因为您的发布过程可能不包含该文件夹。
答案 1 :(得分:1)
Azure网站提供了可用于获取临时存储文件夹之类的环境变量。例如,有一个&#34; TEMP&#34;您可以访问的变量,以获取特定于您的网站的TEMP文件夹的路径。
将方法中的第2行更改为:
//string physicalPathToDirectory = Server.MapPath(virtualPathToDirectory);
string physicalPathToDirectory = Environment.GetEnvironmentVariable("TEMP");
然后将最后一行更改为:
//return File(Server.MapPath(virtualPathToDirectory + "/" + fileName), "text/csv", fileName);
return File(pathToFile, "text/csv", fileName);