Jakarta ee Javaservlet读取文件并将其作为响应发送

Jakarta ee Javaservlet读取文件并将其作为响应发送,jakarta-ee,Jakarta Ee,我正在尝试编写一个servlet,它将从远程位置读取(下载)文件,并将其作为响应发送,或多或少像代理一样隐藏实际文件,以防下载。我来自PHP背景,在那里我可以像调用一样简单 使用servlet/jsp实现这一目标有什么简便的方法吗 谢谢这个怎么样? 范例 /src_directory_path/是远程服务器的装载目录 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) thro

我正在尝试编写一个servlet,它将从远程位置读取(下载)文件,并将其作为响应发送,或多或少像代理一样隐藏实际文件,以防下载。我来自PHP背景,在那里我可以像调用一样简单

使用servlet/jsp实现这一目标有什么简便的方法吗

谢谢

这个怎么样?

范例 /src_directory_path/是远程服务器的装载目录

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {
    resp.setContentType("application/octet-stream");
    resp.setHeader("Content-Disposition", "filename=\"hoge.txt\"");
    File srcFile = new File("/src_directory_path/hoge.txt");
    FileUtils.copyFile(srcFile, resp.getOutputStream());
}
这是你想听的吗

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
  InputStream in = new URL( "http://remote.file.url" ).openStream();
  IOUtils.copy(in, response.getOutputStream());
}

doGet方法的req和res参数必须是request和responseHi。AndroidCodeHunter。感谢您的建议。如果您希望要求用户保存文件而不是通过浏览器显示其内容,请添加附件参数:
resp.setHeader(“内容处置”,“附件;文件名=\”hoge.txt\”)
谢谢您的回答。我正在尝试发送一个二进制(mp3)文件。。。这样行吗?谢谢。将测试并让您知道。顺便问一下,它是否适用于远程文件?
int BUFF_SIZE = 1024;
byte[] buffer = new byte[BUFF_SIZE];
File fileMp3 = new File("C:\Users\Ajay\*.mp3");
FileInputStream fis = new FileInputStream(fileMp3);
response.setContentType("audio/mpeg");
response.setHeader("Content-Disposition", "filename=\"hoge.txt\"");
response.setContentLength((int) fileMp3.length());
OutputStream os = response.getOutputStream();

try {
    int byteRead = 0;
    while ((byteRead = fis.read()) != -1) {
       os.write(buffer, 0, byteRead);

    }
    os.flush();
} catch (Exception excp) {
    downloadComplete = "-1";
    excp.printStackTrace();
} finally {
    os.close();
    fis.close();
}