我使用spring框架来提供下载文件。我有以下代码。
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)等)