Grails中文件的上传和下载


Grails中文件的上传和下载 一.文件的上传 文件上传是自己写的一个工具类,利用 HTML 中的 input 标签完成的。 1.上传类 (UpLoad.java) import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartFile; import java.io.File; import java.io.IOException; public class UpLoad { public static String upLoad(MultipartHttpServletRequest request, CommonsMultipartFile name){ if( request instanceof MultipartHttpServletRequest) { String url = ""; MultipartFile file = request.getFile(name.getName()); if( file != null &&!file.isEmpty()) { File upload = new File(request.getRealPath("")+"/upload"); if(!upload.exists()){ upload.mkdir(); } File file2 = new File(request.getRealPath("")+"/upload/"+file.getOriginalFilename()); try { file.transferTo(file2); //文件的上传 } catch (IOException e) { e.printStackTrace(); } url ="/upload/"+file.getOriginalFilename(); } return url; //返回文件在服务器端的相对路径 } return null; } } 2.gsp 页面上写法 1)本页面有一个上传按钮,点击弹出一个新页面,(1.gsp) //js 代码,向服务器发送一个请求 2)上传文件的页面(upload.gsp) 附件上传

附件上传

//grails 标签 //js 是把附件的地址传给父页面,业务需要,可以不管
${flash.message}
//这个是必须的
3.Controller 里的写法 def upload = { def fjUrl = params.fjUrl if (request.method == 'POST') { def url = UpLoad.upLoad(request, params.fjUrl) if (url != "") { flash.message = "上传成功" render(view: 'upload', model: [url: url]) } else { flash.message = "请选择需要上传的附件" render(view: 'upload') } } else { render(view: 'upload') } } 二.文件的下载 文件的下载是利用 apache的一个开源 组件 common-fileupload 实现的。 下载后解压 zip 包 ,将commons-fileupload-1.0.jar复制到 tomcat的 webapps你的 webappWEB- INFlib 下,目录不存在请自建目录。 或者放到 tomcat 的common 下的 lib 目录下也可以。 1.gsp页面上的写法: ${fjUrl} //因为附件的 URL 是和 jchc 对象相关的,所以这里传个 jchc 对象的 id 到服务器, 再根据它找到对应附件的 URL 2.Conntroller 里的写法: def download = { def id = params.id def jchc = JcHc.get(params.id) def filename = request.getRealPath("")+jchc.fjUrl boolean isOnLine = false; //isOnLine 可以有客户端传过来,这里就自己写了,因为我只要求下载。 File f = new File(filename); if(!f.exists()){ response.sendError(404,"File not found!"); return; } BufferedInputStream br = new BufferedInputStream(new FileInputStream(f)); byte[] buf = new byte[1024]; int len = 0; def name = java.net.URLEncoder.encode(f.getName(), "UTF-8"); name = new String(name.getBytes("UTF-8"), "GBK"); //在客户端的保存的名称,如果该文件的名称有中文,就会出现乱码,在这对文件的 名 称进行转码,就可以解决乱码的问题 response.reset(); //非常重要 if(isOnLine){ //在线打开方式 URL u = new URL("file:///"+filename); response.setContentType(u.openConnection().getContentType()); response.setHeader("Content-Disposition", "inline; filename="+name); //文件名应该编码成 UTF-8 } else{ //纯下载方式 response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition", "attachment; filename=" + name); } OutputStream out = response.getOutputStream(); while((len = br.read(buf)) >0){ out.write(buf,0,len); out.flush(); } br.close(); out.close(); }
还剩4页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

yyc8826

贡献于2013-11-12

下载需要 5 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf