我有这个问题。 我使用spring并将附件(doc,pdf,png ...)存储到服务器文件系统中。 然后我将文件的路径和名称保存到我的数据库中。 现在我如何将此文件作为浏览器的链接阅读?
我想将文件写入Web位置并将此位置提供给浏览器。 这是一个好习惯吗? 但是如何在可视化后删除文件?
我希望问题很明确。
写我用:
/** 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;
}
答案 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);