0

我正在使用 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) 等等)

4

0 回答 0