Знак фунта (#) по ошибке порождения имени файла

У меня есть очень простая загрузка файла, которая позволяет пользователям загружать файлы PDF. На другой странице я затем ссылаюсь на те файлы через тег привязки. Однако кажется, что то, когда пользователь загружают файл, который содержит знак фунта (#) это, повреждает тег привязки. Это не вызывает типа ошибки Coldfusion, это просто не может найти файл. Если я удаляю #, он работает просто великолепно. Я уверен, что существует много других символов, которые имели бы эту ту же проблему.

Я попытался поместить URLEncodedFormat() вокруг имени файла в привязке, но это не помогает. Единственная другая вещь, о которой я мог думать, состояла в том, чтобы переименовать файл каждый раз, когда это было загружено, и удалите "#" символ (и любой другой "плохой" символ).

Должно быть более легкое решение. Какие-либо идеи?

5
задан Taz 11 June 2012 в 06:00
поделиться

4 ответа

В дополнение к FUSE, другим решением является экспорт файловой системы 9p . wmii делает это, например.

-121--3133537-

В идентификаторах допускаются как : , так и пробел. Без кавычек это вызвало бы неоднозначность при попытке определить, что именно составляет идентификатор.

-121--785956-

Если вы управляете кодом загрузки файла, попробуйте проверить последовательность с помощью

 IsValid("url",usersFileName) or
 IsValid("regex",usersFileName,"[a-zA-Z0-9]")

В противном случае, если вы комфортно с regex я бы предложил что-то, как предыдущие плакаты комментируют

  REReplace(usersfilename,"[^a-zA-Z0-9]","","ALL")

Эти образцы предполагают, что вы добавите. «pdf» и позволяет только буквы и цифры. Если вам нужны подчеркивания или период, он будет выглядеть так...

  REReplace(usersfilename,"[^a-zA-Z0-9\._]","","ALL")

Я не регекс-гуру, если у меня есть один из этих неправильных, я уверен, что несколько прыгнут и поправят меня:)

5
ответ дан 15 December 2019 в 01:02
поделиться

Способ сделать это в SVN состоит в том, чтобы извлечь рабочую копию кода, внести изменения в рабочую копию, а затем при обновлении svn получить самую последнюю версию кода из репозитория при сохранении локальных изменений. Он уведомит вас, если возникнут какие-либо конфликты.

Я думаю, что ответы, которые относятся к ветвлению и слиянию и распределенным системам управления версиями (например, Mercurial, Git), более сложны, чем то, что вам нужно.

-121--4501646-

Я не думаю, что это возможно с Qt. Можно

  • перечислить все сигналы класса с помощью QMetaObject:: method и QMetaMethod:: methodType;
  • присоединить один из собственных слотов ко всем этим сигналам;
  • проверить, кто вызвал слот с помощью QObject:: sender.

Но я застрял после этого. Не думаю, что, кроме отправителя, можно получить любую информацию о том, как был вызван слот.

-121--3279209-

Я пока не могу прокомментировать, но решение Кевинка хорошее, если не нужно сохранять то, что вы заменяете.

Мы столкнулись с экземпляром, где нам нужно было переименовать имя файла, но имя файла необходимо было несколько сохранить (требование пользователя). Простое удаление специальных символов не было вариантом. В результате мы должны были справиться с каждой заменой индивидуально, что-то вроде.

<cfset newName = replace(thisFile, "##", "(pound)", "All")>
<cfset newName = replace(newName , "&", "(amp)", "All")>
<cffile action="rename"source = "#ExpandPath("\uploads\#thisFolder#\#thisFile#")#" destination = "#newName#">
0
ответ дан 15 December 2019 в 01:02
поделиться

Вероятно, вам придется заменить # на ##, чтобы избежать этого, я думаю, это вызвано тем, что # фигурирует как ключевое слово Coldfusion.

-1
ответ дан 15 December 2019 в 01:02
поделиться

Знаки фунта не являются юридическими в пределах имена файлов в Интернете. Они используются для настраичных целей якорных целей:

<a name="target">

, поэтому, если у вас есть файл # name.pdf, браузер на самом деле ищет файл «Файл» и внутренний якорь «name.pdf».

Да, вам нужно будет переименовать ваши файлы на загрузку.

0
ответ дан 15 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: