Java Spring:如何下载文件?

Java Spring:如何下载文件?,java,spring,Java,Spring,我想将zip存档从服务器保存到用户计算机。我有一个网页,显示了一些关于这个文件的信息,并有一个下载按钮。在我的控制器操作按钮中,只需在主页上重定向,但我想从数据库中获取数据并将其保存到用户计算机,路径由用户定义 问题是我不知道怎样才能走这条路。你能给我举个例子吗?在你的控制器方法中,你可以添加这些代码来下载文件 File file = new File("fileName"); FileInputStream in = new FileInputStream(file); byte[] cont

我想将zip存档从服务器保存到用户计算机。我有一个网页,显示了一些关于这个文件的信息,并有一个下载按钮。在我的控制器操作按钮中,只需在主页上重定向,但我想从数据库中获取数据并将其保存到用户计算机,路径由用户定义


问题是我不知道怎样才能走这条路。你能给我举个例子吗?

在你的控制器方法中,你可以添加这些代码来下载文件

File file = new File("fileName");
FileInputStream in = new FileInputStream(file);
byte[] content = new byte[(int) file.length()];
in.read(content);
ServletContext sc = request.getSession().getServletContext();
String mimetype = sc.getMimeType(file.getName());
response.reset();
response.setContentType(mimetype);
response.setContentLength(content.length);
response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
org.springframework.util.FileCopyUtils.copy(content, response.getOutputStream());

您不必知道如何获取路径,因为路径是由用户定义的:),但是如果您要查找下载路径,请检查网站的源代码以及下载按钮链接到的位置。通常您可以在
的开头看到它

如果您只是想下载一个文件:

public void download(String filename, String url) {

    URL u;
    InputStream is = null;
    DataInputStream dis;
    String s;

    try{
      u = new URL(url);

      // throws an IOException
      is = u.openStream();

      dis = new DataInputStream(new BufferedInputStream(is));
      FileWriter fstream = new FileWriter(filename);
      BufferedWriter out = new BufferedWriter(fstream);

      while ((s = dis.readLine()) != null) {

          // Create file 
          out.write(s);
          //Close the output stream
          out.close();
      }

    }catch (Exception e){ //Catch exception if any
        System.err.println("Error: " + e.getMessage());
    }

    is.close();
}

如果您想从外部URL或S3下载,希望这对您有所帮助。

@RequestMapping(value = "asset/{assetId}", method = RequestMethod.GET)
public final ResponseEntity<Map<String, String>> fetch(@PathVariable("id") final String id)
    throws IOException {
String url = "<AWS-S3-URL>";
HttpHeaders headers = new HttpHeaders();
headers.set("Location", url);

Map<String, String> map = null;

ResponseEntity<Map<String, String>> rs =
      new ResponseEntity<Map<String, String>>(map, headers, HttpStatus.MOVED_PERMANENTLY);

return rs;
@RequestMapping(value=“asset/{assetId}”,method=RequestMethod.GET)
公共最终响应获取(@PathVariable(“id”)最终字符串id)
抛出IOException{
字符串url=“”;
HttpHeaders=新的HttpHeaders();
headers.set(“位置”,url);
Map=null;
反应性=
新的响应属性(映射、标题、HttpStatus.MOVED_永久);
返回rs;

}

您已经在这里看到了吗?-谢谢!这真的帮助我理解了原则。谢谢你的帮助,马蒂。德米特罗的评论有助于解决我的问题。