У меня есть элемент управления FileUpload, и есть определенные ограничения на имя файла, некоторые символы, которые не должны быть разрешены. Следующий код работает для большинства персонажей, но по какой-то причине не другие:
if (FileUpload1.HasFile)
{
if (FileUpload1.FileName.Contains('#') ||
FileUpload1.FileName.Contains('&') ||
FileUpload1.FileName.Contains(';') ||
FileUpload1.FileName.Contains('{') ||
FileUpload1.FileName.Contains('}') ||
FileUpload1.FileName.Contains('+'))
{
//error: bad character detected
}
}
Возможно, я мог бы сделать еще один (лучший) способ с регулярным выражением, но сначала я действительно хочу знать, почему это не работает.
В FileName обнаружены следующие символы :
# & } +
В FileName обнаружены следующие символы не:
; {
Почему?
Изменить: примеры имен файлов, которые я пробовал.
-
Final + Version.pdf//+ обнаружено
-
Final; Version.pdf//; НЕ обнаружено
-
WhyHello {there.pdf//{НЕ обнаружено
-
Политики} 20120303.pdf//} обнаружено
Как упоминалось в комментариях ниже, нет никаких проблем с этими символами в строках, так что, может быть, это проблема со значением "FileName" или способом, которым FileUploader обрабатывает имя файла?
Изменить 2: Точка точки останова показывает, что с помощью Политики {20120303.pdf в качестве примера значение FileName - Policies.pdf. Так что это не проблема с .Contains(), но с FileUpload и FileName.
Итак, новый вопрос: как я могу справиться с этим? Я не хочу, чтобы файлы с этими символами проходили, и я не хочу, чтобы предоставленные файлы были названы иначе, чем их назвал пользователь. Поэтому, если кто-то пытается отправить "Политики (20120303.pdf), мне нужен один из двух результатов:
- обнаружено неверное имя, процедура отменена
- отправьте файл с полным и оригинальным именем, Политики {20120303.pdf
Изменить 3: Если я отправлю файл со следующим именем: foo; bar {baz.txt, значение FileUpload.FileName " foo.txt"
Изменить 4: Благодаря некоторым полезным комментариям ниже я попытался использовать другой браузер (Chrome), и он работает отлично! Имя файла остается неизменным, даже с foo; bar {baz.txt. Я использую Opera, и она не работает. Я предполагаю, что это значительно сокращает проблему, связанную с браузером. Я не думаю, что будет какой-либо способ сделать эту работу должным образом в Opera, если у кого-то нет идей?