我正在使用 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 个字符的文件时,我可以在 Windows 10 上的 Chrome 和 IE11 中成功下载。
但是,当我尝试在 MS Edge 中执行此操作时,由于文件名过长,下载不成功。我怎样才能让它在 MS Edge 上也能工作。
编辑
我刚刚意识到,在 Chrome 中,文件名始终限制为 218 个字符,并且最后一个字符被修剪。
所以,我的新问题是如何将字符限制为 218 个,特别是在已经存在同名文件的情况下(然后附加文件名 (1)、(2) 等等)