将文件从Web服务器传输到客户端

时间:2013-12-05 01:35:43

标签: java spring web

我有一个简单的Spring java Web服务器。它执行一些在服务器上创建一些xml文件的处理。我想将这些文件传输到客户端计算机。

出于某种原因,我甚至不知道如何开始或搜索答案。它应该不难,因为我使用的是Spring,它们只是xml文件而不是二进制文件。有人可以指导我在搜索中寻找什么吗?

我在控制器中使用@RequestMapping。他们看起来像这样:

@Controller
@RequestMapping(value = "/export")
public class ExportController {


    @RequestMapping(method = RequestMethod.GET)
    public String getExport(ModelMap map) throws Exception {

    return "export"
}

这将返回到jsp文件。

3 个答案:

答案 0 :(得分:0)

最简单(但不是最好)的方法是将它们写入磁盘,然后在网页上提供指向它们的链接。

另一种方法是打开一个响应流并回写内容。

答案 1 :(得分:0)

有两种方法:

1)控制器方法:
指定控制器

@RequestMapping("/getFile")
public ResponseEntity<byte[]> getFile() throws IOException {
    InputStream in = fetchFile("test.png");

    final HttpHeaders headers = new HttpHeaders();
    //Specify MediaType of the file you want to return
    headers.setContentType(MediaType.IMAGE_PNG); 

    return new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED);
}

servlet-context.xml文件中的mvc注释:

<mvc:annotation-driven>
    <mvc:message-converters>
        <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter">
            <property name="supportedMediaTypes">
                <list>
                    <value>image/jpeg</value>
                    <value>image/png</value>
                </list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

2)在服务器上下文中保存文件并公开浏览器的路径。

答案 2 :(得分:0)

这是我们在项目中使用的内容:

    @RequestMapping(value = "/export", method = RequestMethod.GET, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    @ResponseBody
    public FileSystemResource downloadDocument(@PathVariable Long docId, HttpServletRequest request, 
            HttpServletResponse response) throws IOException, DocumentServiceException {                    
        //set the default file name to be saved by user. 
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition","attachment;filename=XMLFileName");
        return new FileSystemResource(new File("XMLfilePath"));

    }

请注意,XMLFileName是用户默认保存的文件名,XMLfilePath是文件的物理路径。