Загрузка файла с именем файла более 255 символов с использованием MS edge
Я использую Spring Framework для предоставления файла для скачивания. У меня есть следующий код.
public ResponseEntity<List<Integer>>
defExport()
throws IllegalStateException,
IOException {
Map<String, Object> resultMap = Maps.newHashMap();
int status = STATUS_SUCCESS;
HttpHeaders headers = new HttpHeaders();
List<Integer> byteList = Lists.newArrayList();
try {
File file = transformService.executeExport(something);
byte[] fileContent = null;
try (InputStream is = new FileInputStream(file)) {
fileContent = read(is);
}
String fileName = StringUtils.join(something, ".xlsx");
headers.add("fileName", fileName);
headers.add("Content-Disposition", StringUtils.join(
"attachment; filename=\"", URLEncoder.encode(fileName, "UTF8"), "\""));
for (byte b : fileContent) {
byteList.add(new Integer(b));
}
} catch (Exception e) {
status = STATUS_ERROR;
}
headers.add("ifxResultStatus", String.valueOf(status));
return new ResponseEntity<>(byteList, headers, HttpStatus.OK);
на стороне JS у меня есть следующее:
_self.xhr.open('POST', targetUrl, true);
_self.xhr.onreadystatechange = goog.bind(this.blankDlResponseHandler, this);
_self.xhr.setRequestHeader('X-CSRF-TOKEN', project.core.app.View.getCsrfToken());
var form_data = new FormData();
_self.xhr.send(form_data);
Когда я пытаюсь загрузить файл с именем, длина которого превышает 255 символов, я могу сделать это успешно в Chrome и IE11 в Windows 10.
Тем не менее, когда я пытаюсь сделать это в MS Edge, загрузка не удалась из-за длинного имени файла. Как я могу заставить это работать на MS Edge также.
редактировать
Я только что понял, что в Chrome имя файла всегда ограничено 218 символами, а последние символы обрезаются.
Итак, мой новый вопрос: как я могу ограничить количество символов до 218, особенно в случае, когда файл с таким именем уже существует (к нему добавляются имена файлов (1),(2) и т. Д.)