使用java从文件夹文件系统输出存储文件

时间:2012-11-28 21:11:10

标签: java-ee spring-mvc outputstream

我有这个问题。 我使用spring并将附件(doc,pdf,png ...)存储到服务器文件系统中。 然后我将文件的路径和名称保存到我的数据库中。 现在我如何将此文件作为浏览器的链接阅读?

我想将文件写入Web位置并将此位置提供给浏览器。 这是一个好习惯吗? 但是如何在可视化后删除文件?

我希望问题很明确。

enter image description here

写我用:

 /** what write for reach temp-file folder (my project name is intranet)
   I thougth TEMP_FOLDER=""/intranet/resources/temp-files/";
   but It doesnt work. ioexception (The system cannot find the path specified)
 */
 final static String TEMP_FOLDER=?????

public static String createTempFile(String originalPathFile,String fileName){
String tempPathFile="";
try {
    InputStream inputStream = new FileInputStream(originalPathFile);
    tempPathFile=TEMP_FOLDER+fileName;
    File tempFile = new File(tempPathFile);

    OutputStream out = new FileOutputStream(tempFile);
    int read = 0;
    byte[] bytes = new byte[1024];
    while ((read = inputStream.read(bytes)) != -1) {
        out.write(bytes, 0, read);
    }
    out.flush();
    out.close();
} catch (IOException ioe) {
     System.out.println("Error while Creating File in Java" + ioe);
}

return tempPathFile;
  }

2 个答案:

答案 0 :(得分:2)

  

现在我如何将此文件作为浏览器的链接阅读?

将以下链接放在JSP

<a href="<c:url value="/fileDownloadController/downloadFile?filename=xyz.txt"/>" title="Download xyz.txt"></a>

在您的控制器中:

@Controller
@RequestMapping("/fileDownloadController")
public class FileDownloadController
{
    @RequestMapping("/downloadFile")
    public void downloadFile( 
        @RequestParam String filename,
        HttpServletResponse response)
    {
        OutputStream outputStream = null;
        InputStream in = null;
        try {
            in = new FileInputStream("/tmp/" + filename); // I assume files are at /tmp
            byte[] buffer = new byte[1024];
            int bytesRead = 0;
            response.setHeader(
                "Content-Disposition",
                "attachment;filename=\"" + filename + "\"");
            outputStream = response.getOutputStream();
            while( 0 < ( bytesRead = in.read( buffer ) ) )
            {
                outputStream.write( buffer, 0, bytesRead );
            }
        }
        finally
        {
            if ( null != in )
            {
                in.close();
            }
        }

    }
}

答案 1 :(得分:1)

对于使用IOUtils输入此问题的人来说,另一个答案是有用的:

IOUtils.copy(new FileInputStream("filename"), outputStream);