Java: Как разместить специальные символы в имени файла при загрузке и загрузке файла?

Фон:

У меня есть файл, который я загружаю, во время этого процесса, ссылка файла хранится в базе данных а не фактическом файле, acutal файл хранится в Файловой системе, в настоящее время храню его в моей локальной машине.

Цель:

Моя цель состоит в том, чтобы загрузить файл и загрузить файл правильно, который имеет специальные символы в ней - #,$,%,@ etc.

Проблема:

Я могу загрузить файл со специальным символом, но не могу загрузить файл специальными символами. Также я не могу выполнить ни в каких изменениях Download Servlet поскольку это - часть Framework, таким образом, все, с чем я могу работать, Upload Servlet, таким образом, мой фокус должен загрузить файл со специальными символами таким способом так, чтобы я мог загрузить их.

Я попытался создать псевдоним для имени файла, где в заменяю специальные символы '_' символ, этот подход хорошо работает и может загрузить файл, но подлинное имя файла не сохраняется в здесь, все специальные символы в имени файла заменяются '_' символ и это не приемлемы, поскольку пользователь должен подлинное имя файла.

Любые предложения или подход:

Код:

public ModelAndView save(HttpServletRequest request, HttpServletResponse response, Object command, 
                        ModelAndView modelView, BindException errors) throws Exception {

String newFileName = checkForSpecialCharsAndGetNewFileName(file.getOriginalFilename());
System.out.println("alias filename="+ newFileName);
String    url = "f" + (String.valueOf(System.currentTimeMillis())) + "_" + newFileName;
String    fileName = file.getOriginalFilename(); 
System.out.println("FileName "+ fileName);
}

//Code to replace all special characters in the incoming file with '_' symbol. 
private String checkForSpecialCharsAndGetNewFileName (String originalFileName) {
  final String[] splChars = {"#", "+", "$"};
  String newString = originalFileName;
  for (int i=0; i<splChars.length; i++)
    newString = StringUtils.replace(newString, splChars[i], "_");
  return newString;
}

Надежда имеет некоторый смысл здесь.

Спасибо.

5
задан Sam Hosseini 17 October 2015 в 23:27
поделиться

1 ответ

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

Для этого можно использовать классы URLEncoder и URLDecoder .

Вы можете сделать это примерно так:

String fileName;
fileName = URLEncoder.encode("My ! String #", "UTF-8");

Это закодирует. Чтобы получить исходное имя файла:

String originalFileName = URLDecoder.decode(fileName, "UTF-8");

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

Надеюсь, что это поможет.

3
ответ дан 14 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

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