response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(name, "UTF-8")); response.setHeader("Content-Length", String.valueOf(fileLength)); bos = new BufferedOutputStream((OutputStream)response.getOutputStream()); download(path, name, bos);前端vue获取filename
时间: 2024-03-17 08:43:42 浏览: 294
在前端Vue中,可以通过axios来发送GET请求,然后在请求的响应中获取到Content-Disposition响应头中的filename值,示例如下:
```
axios.get('/download').then(response => {
const contentDisposition = response.headers['content-disposition']
const matchResult = contentDisposition.match(/filename="(.+)"/)
if (matchResult) {
const filename = matchResult[1]
// 使用获取到的filename进行后续操作
}
})
```
其中,/download为后端提供文件下载的接口地址,response.headers['content-disposition']获取到Content-Disposition响应头的值,然后使用正则表达式匹配出filename值即可。
相关问题
请纠正下面这块代码: response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("部门批量导入模板.xlsx", "UTF-8").replaceAll("\\+", "%20"); response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName); response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
这段代码是用于设置HTTP响应头,以便于浏览器下载文件。以下是代码的解释:
```java
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
```
该行代码设置响应体的Content-Type为“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”,表示要下载的是一份Excel文件。
```java
response.setCharacterEncoding("utf-8");
```
该行代码设置响应体的字符编码为UTF-8。
```java
String fileName = URLEncoder.encode("部门批量导入模板.xlsx", "UTF-8").replaceAll("\\+", "%20");
```
该行代码对文件名进行了URL编码,并将空格替换成了%20。其中,URLEncoder.encode方法将文件名进行了URL编码,以防止文件名中含有非ASCII字符导致下载失败;replaceAll方法将空格替换成了%20,因为URL中不允许出现空格。
```java
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName);
```
该行代码设置响应体的Content-Disposition,表示浏览器应该将响应体作为文件下载。其中,filename*=utf-8''指定了文件名采用UTF-8编码方式,而后面的fileName则是实际的文件名。
```java
response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
```
该行代码设置Access-Control-Expose-Headers响应头,以允许浏览器访问Content-Disposition响应头。
response.reset(); response.setCharacterEncoding("UTF-8"); response.setContentType("application/octet-stream"); response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); 通过以上代码下载文件内容中文乱码,图片及xslx文件损坏
感谢您提供的代码。对于文件内容中文乱码和图片、xlsx文件损坏的问题,您可以尝试以下方法进行解决:
1. 对于文件内容中文乱码,可以尝试使用`OutputStreamWriter`将文件内容以指定的编码写入到输出流中,再将输出流写入response。例如:
```java
OutputStream outputStream = response.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(outputStream, "UTF-8");
writer.write(fileContent); // 将文件内容写入输出流
writer.flush();
writer.close();
```
2. 对于图片和xlsx文件损坏的问题,可能是由于文件在传输过程中发生了损坏。可以尝试使用`FileInputStream`将文件读取为字节流,并将字节流直接写入到response的输出流中。例如:
```java
FileInputStream fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead); // 将字节流写入response的输出流
}
fileInputStream.close();
```
请注意,上述代码中的`fileContent`和`file`需要根据您的实际情况进行替换。另外,确保在下载图片和xlsx文件之前,正确地设置了对应的Content-Type头文件类型。
如果问题仍然存在,请提供更多细节,例如具体的错误提示或代码逻辑,以便我们更好地帮助您解决问题。
阅读全文