标签:icloud fileinput 静态 spring protected you net highlight servlet
展示如何使用Spring MVC4执行文件下载,我们将看到应用程序从文件系统内部以及外部文件下载文件。
下载文件是相当简单的,涉及以下步骤。
response.setHeader(“Content-Disposition”, “inline; filename=” + fileName);//通过“内联”浏览器将尝试显示内容到浏览器中(图片,PDF,文本,...)。对于其他内容类型,文件将直接下载。
完整实施例在下面讨论。
pom.xml配置
<properties>
<springVersion>4.3.5.RELEASE</springVersion>
</properties>
<dependencies>
<!-- spring模块库 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${springVersion}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${springVersion}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<!-- transaction事务 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${springVersion}</version>
</dependency>
<!-- Servlet dependencies -->
<!-- servlet(HttpServletRequest,HttpServletResponse) -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/jstl/jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<finalName>gugua14</finalName>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
<warName>gugua14</warName>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

HelloWorldConfiguration.java
package springmvc.configuration;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages="springmvc")
public class HelloWorldConfiguration extends WebMvcConfigurerAdapter{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// TODO Auto-generated method stub
//super.addResourceHandlers(registry);
//设置静态目录
registry.addResourceHandler("/static/**").addResourceLocations("/static/");
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
// TODO Auto-generated method stub
//super.configureViewResolvers(registry);
InternalResourceViewResolver viewReslover = new InternalResourceViewResolver();
viewReslover.setViewClass(JstlView.class);
viewReslover.setPrefix("/WEB-INF/views/");
viewReslover.setSuffix(".jsp");
registry.viewResolver(viewReslover);
}
}
dispatcherServlet转发配置
package springmvc.configuration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class HelloWorldIntializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// TODO Auto-generated method stub
return new Class[] {HelloWorldConfiguration.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
// TODO Auto-generated method stub
return null;
}
@Override
protected String[] getServletMappings() {
// TODO Auto-generated method stub
return new String[] {"/"};
}
}
controller代码
package springmvc.controller;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLConnection;
import java.nio.charset.Charset;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HelloWorldController {
private static final String FILE_1 = "APICloud-basic-2.2.1.zip";
private static final String FILE_2 ="D:/download/APICloud-basic-2.2.1.zip";
@RequestMapping(value="/down", method=RequestMethod.GET)
public String index()
{
return "index";
}
@RequestMapping(value="/download/{type}", method=RequestMethod.GET)
public void download(HttpServletResponse response, @PathVariable("type") String type) throws IOException
{
File file = null;
if( type.equalsIgnoreCase("internal") )
{
//内部地址
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
file = new File( classLoader.getResource(FILE_1).getFile() );
}else {
//外部地址
file = new File(FILE_2);
}
//文件是否存在
if(!file.exists())
{
String errorMessage = "Sorry. The file you are looking for does not exist";
System.out.println(errorMessage);
OutputStream outputStream = response.getOutputStream();
outputStream.write(errorMessage.getBytes(Charset.forName("UTF-8")));
outputStream.close();
return;
}
//获取文件类型,并输出文件类型
String mimeType = URLConnection.guessContentTypeFromName(file.getName());
if(mimeType == null)
{
System.out.println("mimeType is not detectable.");
mimeType = "application/octet-stream";
}
System.out.println("mimeType:" + mimeType);
//输出类型
response.setContentType(mimeType);
//mime协议:默认文件名
response.setHeader("Content-Disposition", String.format("inline: filename=\""+file.getName()+"\""));
//mime协议:以附件形式下载
response.setHeader("Content-Disposition", String.format("attachment: filename=\"%s\"", file.getName()));
//文件大小
response.setContentLength((int) file.length());
//读入文件,然后再输出
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
//拷贝,下载
FileCopyUtils.copy(inputStream, response.getOutputStream());
}
}
访问地址:http://localhost:8080/gugua14/down
标签:icloud fileinput 静态 spring protected you net highlight servlet
原文地址:https://www.cnblogs.com/achengmu/p/9176975.html