ssm实现图片上传和前台显示和下载

  • 1.jsp页面基本上传为

<form action="/file/upload" enctype="multipart/form-data" method="post">
<input type="file" name="file" width="120px">
<button type="submit">上传<tton>
</form>

  • 2.上传到controller处理

public String upload(MultipartFile file, HttpServletRequest request) throws IOException {

// String path = request.getSession().getServletContext().getRealPath("/upload");

String path = "D:/apache-tomcat-7.0.85/webapps/upload";

String fileName = file.getOriginalFilename();

FileInfo fileInfo = new FileInfo();

fileInfo.setFileName(fileName);

String filePath = path+"/"+fileName;

fileInfo.setFileUrl(filePath);

fileService.fileUpload(fileInfo);//文件信息保存到数据库

File dir = new File(path,fileName);

if(!dir.exists()){

dir.mkdirs();

}

file.transferTo(dir);

return "list";

//其中path为指定上传路径,上传到哪里,filename为上传文件名字

  • jsp页面前台显示图片

<img src="${pageContext.request.contextPath}/fileviewImage?path=${files.fileUrl}">
//filepath为文件绝对路径,获取绝对路径图片必须以流的方式运行然后到controller处理
@RequestMapping("viewImage")
public void find(String path,OutputStream outputStream){
try {
StreamUtils.copy(new FileInputStream(path),outputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
其中streamUtils为自动配好的

前台下载页面

<table>
    <tr><td>名称</td>

        <td>位置</td></tr>
    <c:forEach items="${file}" var="files">
        <tr>
            <td>${files.fileName}</td>
            <td>
                <a href="/file/download?path=${files.fileUrl}&filename=${files.fileName}">下载</a>
            </td></tr>
    </c:forEach>
</table>

controllor处理下载请求

@RequestMapping("/download")
public void download(String path,String filename, HttpServletRequest request, HttpServletResponse response) throws Exception {
   // path为文件所在地址加文件名
    //转码,免得文件名中文乱码,保证能找到文件具体位置特别是中文文件,还有下载中文文件时保证文件名不会乱码
    path= new String(path.getBytes("ISO-8859-1"), "utf-8");
    filename= new String(filename.getBytes("ISO-8859-1"), "utf-8");
    //得到要下载的文件
    File file = new File(path);
    if (!file.exists()) {
        response.setContentType("text/html; charset=UTF-8");//注意text/html,和application/html
        response.getWriter().print("<html><body><script type='text/javascript'>alert('您要下载的资源已被删除!');</script></body></html>");
        response.getWriter().close();
        System.out.println("您要下载的资源已被删除!!");
        return;
    }
    //转码,免得文件名中文乱码
    //filename = URLEncoder.encode(filename, "UTF-8");
    //设置文件下载头
    response.addHeader("Content-Disposition", "attachment;filename=" + filename);
    //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型
    response.setContentType("multipart/form-data");
    // 读取要下载的文件,保存到文件输入流
    FileInputStream in = new FileInputStream(path);
    // 创建输出流
    OutputStream out = response.getOutputStream();
    // 创建缓冲区
    byte buffer[] = new byte[1024]; // 缓冲区的大小设置是个迷  我也没搞明白
    int len = 0;
    //循环将输入流中的内容读取到缓冲区当中
    while ((len = in.read(buffer)) > 0) {
        out.write(buffer, 0, len);
    }
    //关闭文件输入流
    in.close();
    // 关闭输出流
    out.close();
}

 

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值