You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

76 lines
2.7 KiB
Java

package com.ruoyi.system.config;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.util.URLUtil;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.HttpDownloadUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
/**
* 本地文件公开下载配置
* 方式一:SpringBoot静态资源配置
* 方式二:Servlet
*/
@Configuration
@RequiredArgsConstructor
@Slf4j
public class DownloadFileConfig {
private final RuoYiConfig config;
@Bean
public WebMvcConfigurer DownloadFileWebMvcConfigurer() {
return new WebMvcConfigurer(){
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//加入外部静态资源html文件夹
String path = new File(new File(config.upload.savePath).getAbsolutePath()).toURI().toString();
registry.addResourceHandler(config.upload.pre+"/**").addResourceLocations(path);
log.info("添加静态资源目: {}/** ={}",config.upload.pre,path);
}
};
}
public ServletRegistrationBean DownloadFileServletRegistrationBean() {
ServletRegistrationBean bean = new ServletRegistrationBean();
bean.setServlet(new HttpServlet() {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uri = req.getRequestURI().substring(config.upload.pre.length());
uri = URLUtil.decode(uri);
File down = new File(config.upload.savePath, uri);
if(down.isFile()) {
try {
HttpDownloadUtil.download(req, resp,down,
FileNameUtil.getName(uri));
resp.getOutputStream().close();
} catch (Exception e) {
resp.reset();
resp.sendError(404);
}
}else {
resp.sendError(404);
}
}
});
bean.addUrlMappings(config.upload.pre+"/*");
return bean;
}
}