我能否从运行在服务器上的Web API应用程序将文件写入服务器上的文件夹?

10

我在我的Web API应用程序中有这段代码,用于将数据写入CSV文件:

private void SaveToCSV(InventoryItem invItem, string dbContext)
{
    string csvHeader = "id,pack_size,description,vendor_id,department,subdepartment,unit_cost,unit_list,open_qty,UPC_code,UPC_pack_size,vendor_item,crv_id";

    int dbContextAsInt = 0;
    int.TryParse(dbContext, out dbContextAsInt);
    string csvFilename = string.Format("Platypus{0}.csv", dbContextAsInt);

    string csv = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8},{9},{10},{11},{12}", invItem.ID,
        invItem.pksize, invItem.Description, invItem.vendor_id, invItem.dept, invItem.subdept, invItem.UnitCost,
        invItem.UnitList, invItem.OpenQty, invItem.UPC, invItem.upc_pack_size, invItem.vendor_item, invItem.crv_id);

    string existingContents;
    using (StreamReader sr = new StreamReader(csvFilename))
    {
        existingContents = sr.ReadToEnd();
    }

    using (StreamWriter writetext = File.AppendText(csvFilename))
    {
        if (!existingContents.Contains(csvHeader))
        {
            writetext.WriteLine(csvHeader);
        }
        writetext.WriteLine(csv);
    }
}

在开发机上,默认情况下,csv文件保存在“C:\ Program Files(x86)\ IIS Express”中。 为了准备将其部署到最终位置,我需要做什么才能使文件保存到服务器的“Platypi”文件夹中?有什么特殊要求吗?我是否需要明确设置某些文件夹权限以允许写入“Platypi”?
这只是改变此行的问题:
string csvFilename = string.Format("Platypus{0}.csv", dbContextAsInt);

…变成这个:

string csvFilename = string.Format(@"\Platypi\Platypus{0}.csv", dbContextAsInt);

?

2个回答

19

对于IIS文件夹,应用有写入权限。我建议将文件写入App_Data文件夹。

如果要将文件保存在IIS应用程序文件夹外部,您必须为IIS应用程序池的服务帐户(我认为默认为NETWORKSERVICE)在该文件夹上授予适当的权限。

根据B. Clay Shannon的要求,这是我的实现:

string fullSavePath = HttpContext.Current.Server.MapPath(string.Format("~/App_Data/Platypus{0}.csv", dbContextAsInt));

我可以通过 Environment.SpecialFolder.ApplicationData 写入 AppData 文件夹吗? - B. Clay Shannon-B. Crow Raven
下面这行代码只是返回字符串 "ApplicationPath": string pathOfMostResistence = Environment.SpecialFolder.ApplicationData.ToString(); - B. Clay Shannon-B. Crow Raven
2
只需使用 Server.MapPath("~/App_Data/...")。这将返回 app_data 文件夹。~ 表示应用程序根文件夹。 - Patrick Hofman
1
你需要更多的帮助吗? - Patrick Hofman
不要使用 HttpServerUtility,而是使用 HttpContext - Patrick Hofman
显示剩余5条评论

4

感谢Patrick Hofman; 这是我正在使用的确切代码,并保存到项目的App_Data文件夹中:

public static string appDataFolder = HttpContext.Current.Server.MapPath("~/App_Data/");
. . .
string csvFilename = string.Format("Platypus{0}.csv", dbContextAsInt);
string fullSavePath = string.Format("{0}{1}", appDataFolder, csvFilename);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接