java下载文件成word

1.pom中指定资源路径和不让maven压缩docx文件

指定资源路径如下:

<include>**/*.docx</include>

不压缩docx文件如下:

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-resources-plugin</artifactId>
	<configuration>
      <nonFilteredFileExtensions>
            <nonFilteredFileExtension>docx</nonFilteredFileExtension>
            </nonFilteredFileExtensions>
       </configuration>
</plugin>
 <build>
            <finalName>simple</finalName>
            <resources>
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.yml</include>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
<!--                        <include>**/*.docx</include>-->
                    </includes>
                    <filtering>false</filtering>
                </resource>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*.yml</include>
                        <include>**/*.properties</include>
                        <include>**/*.xml</include>
<!--                        设置资源路径里资料包括.docx文件-->
                        <include>**/*.docx</include>
                    </includes>
                    <filtering>true</filtering>
                </resource>
            </resources>


            <plugins>

                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>


                <!-- 不让maven压缩docx文件,但仍将其打包 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <configuration>
                        <nonFilteredFileExtensions>
                            <nonFilteredFileExtension>docx</nonFilteredFileExtension>
                        </nonFilteredFileExtensions>
                    </configuration>
                </plugin>

            </plugins>
</build>

坑:

1.不设置资源路径爆出找不到文件异常:
java.io.FileNotFoundException: class path resource [*/] cannot be opened because it does not exist
2.不设置 <nonFilteredFileExtension>docx</nonFilteredFileExtension>会将docx文件加压,报出加压异常:
java.util.zip.ZipException: Unexpected record signature: 0X9

2.pom添加poi依赖

 			<!-- poi-ti -->
            <dependency>
                <groupId>com.deepoove</groupId>
                <artifactId>poi-tl</artifactId>
                <version>1.12.0</version>
                <exclusions>
                    <exclusion>
                        <!--移除冲突的jar包-->
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>5.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>5.2.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml-schemas</artifactId>
                <version>4.1.2</version>
            </dependency>

3.service接口

public interface CherryService extends IService<Cherry> {
    void export(HttpServletResponse response) throws IOException;
}

4.CherryServiceImpl

package com.cherry.manager.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.cherry.manager.entity.Cherry;
import com.cherry.manager.dao.CherryDao;
import com.cherry.manager.service.CherryService;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.util.PoitlIOUtils;
import com.google.common.collect.Maps;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;

/**
 * (Cherry)表服务实现类
 *
 * @since 2022-09-21 11:12:53
 */
@Service
public class CherryServiceImpl extends ServiceImpl<CherryDao, Cherry> implements CherryService {


    /**
     * 生成word文档
     * @param response
     */
    @Override
    public void export(HttpServletResponse response) throws IOException {
       // 假设要输出的内容,实际从数据库取
       Cherry cherry = new Cherry();
       cherry.setId("01");
       cherry.setName("车厘子");

        // 文件名称
        String fileName = System.currentTimeMillis()+"车厘子"+".docx";

        // word文档里设置内容
        Map<String, Object> dataMap = Maps.newHashMap();
        dataMap.put("id",cherry.getId());
        dataMap.put("name",cherry.getName());

        // 获得资源路径,渲染数据
        XWPFTemplate template = XWPFTemplate.compile(new ClassPathResource("doc/cherry.docx").getInputStream()).render(dataMap);

        // 设置让浏览器下载文件
        response.setContentType("application/force-download");

        // 设置输出文件名
        response.setHeader("Content-Disposition", "attachment; filename="+URLEncoder.encode(fileName,"UTF-8"));

        // 输出流
        OutputStream out = response.getOutputStream();
        BufferedOutputStream bos = new BufferedOutputStream(out);
        template.write(bos);
        bos.flush();
        out.flush();

        // 关闭所有流
        PoitlIOUtils.closeQuietlyMulti(template, bos, out);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值