拥有和使用可配置的允许文件扩展名列表的最佳方法是什么?

时间:2014-06-04 23:56:06

标签: c# asp.net file-extension

我有以下内容:

string _file; //can have any file path on the file server

if (_file.EndsWith("xls") || _file.EndsWith("pdf") || _file.EndsWith("doc")) 
    return _file;

扩展程序是硬编码的,我需要将它们放在web.config中,并使其更具可配置性,使其可以有1个允许扩展名(比如.doc)或50个允许的扩展名({{ 1}},.doc.xls.xlsx,...)。

你有什么建议?

3 个答案:

答案 0 :(得分:6)

您可以将其存储在web.config文件中:

<appSettings>
    <add key="AllowedExtensions" value=".xls,.pdf,.doc" />
</appSettings>

然后使用Path.GetExtension()安全地从路径获取文件扩展名。

var allowedExtensions = ConfigurationManager.AppSettings["AllowedExtensions"]
                                            .Split(',');

if (allowedExtensions.Contains(Path.GetExtension(_file)))
    return _file;
else
    return ???  // What are you going to return if the extension is invalid?

答案 1 :(得分:2)

首先将您允许的扩展名放在app.config文件中。然后,您可以将它们加载到名为List<string>的{​​{1}}中,并使用以下代码:

extensions

或者,如果if (extensions.Any(p => _file.EndsWith(p))) return _file; 可以为null

_file

答案 2 :(得分:0)

的web.config:

 <add key="allowed-extensions" value="pdf,jpg,doc" />

从web.config获取值的函数:

public static string Get(string Key)
{
    Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
    KeyValueConfigurationCollection settings = config.AppSettings.Settings;
    if (settings[Key] != null)
        return settings[Key].Value;
    else
        return "";
}

现在你的职能是:

bool checkExt(string givenExtension){
    string[] extensions = Get("alowed-extensions");
    for(int i=0;i<extensions.length;i++)
         if(extensions[i]==givenExtension) return true;
         return false;
}