练习上传下载时遇到的问题

  • public class BaseServlet extends HttpServlet {
  • @Override
  • protected void service(HttpServletRequest req, HttpServletResponse res)
  • throws ServletException, IOException {
  • //页面的编码处理
  • req.setCharacterEncoding("utf-8");
  • res.setContentType("text/html;charset=utf-8");
  • //获取页面要调用的method参数
  • String methodName = req.getParameter("method");
  • if(methodName==null || methodName.trim().isEmpty()){
  • throw new RuntimeException("您未指定要调用的方法!");
  • }
  • //反射得到要调用的反射方法
  • Class clazz = this.getClass();//所访问servlet的字节码文件对象
  • Method method = null;
  • try {
  • method = clazz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
  • }
  • catch (Exception e) {
  • throw new RuntimeException("您要调用的方法"+methodName+"(HttpServletRequest,HttpServletResponse)不存在");
  • }
  • //执行方法
  • try {
  • String result = (String)method.invoke(this, req,res);
  • if(result==null || result.trim().isEmpty()){
  • return;
  • }
  • if(result.contains(":")){
  • int addr = result.indexOf(":");
  • String bef = result.substring(0,addr);
  • String aft = result.substring(addr+1);
  • if(bef.equalsIgnoreCase("r")){
  • res.sendRedirect(req.getContextPath()+aft);
  • }else if(bef.equalsIgnoreCase("f")){
  • req.getRequestDispatcher(aft).forward(req, res);
  • }else{
  • throw new RuntimeException("您指定的操作有误");
  • }
  • }else{
  • req.getRequestDispatcher(result).forward(req, res);
  • }
  • } catch (Exception e) {
  • throw new RuntimeException("方法内部错误"+e);
  • }
  • }
  • public class MyFileServlet extends BaseServlet {
  • MyService service = new MyService();
  • public String findAll(HttpServletRequest req,HttpServletResponse res){
  • List<MyFile> list = service.findAll();
  • req.setAttribute("list", list);
  • return "f:/day22/list.jsp";
  • }
  • public String downLoad(HttpServletRequest req,HttpServletResponse res) {
  • String fid = req.getParameter("fid");
  • MyFile myfile = service.load(fid);
  • try {
  • //获取文件资源名称
  • String path = req.getParameter("path");
  • //解析路径
  • String fname = myfile.getFilename();
  • String name = myfile.getName();
  • name = new String(name.getBytes("iso-8859-1"),"utf-8");
  • //封装文件
  • File file = new File(path,fname);
  • if(!file.exists()){
  • req.setAttribute("msg", "您要下载的资源不存在");
  • return "f:/day22/msg.jsp";
  • }
  • int cnt = myfile.getCnt();
  • /*
  • 其中MyFile 类型的cnt属性是Integer的int cnt = myfile.getCnt();
  • * myfile.setCnt(cnt+1);
  • * service.edit(myfile);
  • * 加入此句后会报出 方法内部错误
  • * java.lang.reflect.
  • * InvocationTargetException
  • * 后来将接口参数由myfile对象换成两个
  • * 需要的直接参数,而不是由myfile间接
  • * 获取,问题解决
  • * */
  • service.edit(cnt+1,fid);
  • name = new String(name.getBytes("GBK"),"iso-8859-1");
  • res.addHeader("content-disposition", "attatchment;filename="+fname);
  • IOUtils.copy(new FileInputStream(file), res.getOutputStream());
  • } catch (Exception e) {
  • throw new RuntimeException(e);
  • }
  • return null;
  • }
时间: 2024-08-01 06:34:29

练习上传下载时遇到的问题的相关文章

轻松实现函数计算文件上传下载

简介:这是一个包含了函数计算每种 Runtime 结合 HTTP Trigger 实现文件上传和文件下载的示例集.我们知道不同语言在处理 HTTP 协议上传下载时都有很多中方法和社区库,特别是结合函数计算的场景,开发人员往往需要耗费不少精力去学习和尝试.本示例集编撰的目的就是节省开发者甄别的精力和时间,为每种语言提供一种有效且符合社区最佳实践的方法,可以拿来即用. 这是一个包含了函数计算每种 Runtime 结合 HTTP Trigger 实现文件上传和文件下载的示例集.每个示例包括: 一个公共

****使用ftp软件上传下载php文件时换行符丢失bug

在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件无法正常运行. 这个时候,再次通过ftp软件把刚才上传的php文件下载到本地windows,用notepad++编辑器打开后,发现php源代码变成了一行,换行丢失. 发生这种情况的原因是什么呢?飘易就以一句话概括下:    由于linux下换行是\n,而windows下换行是\r\n,当ftp软件在

java文件上传下载

文件上传首先要引入两个核心包 commons-fileupload-1.2.1.jar commons-io-1.4.jar 下面是对文件上传和下载的一些代码做的一个简单封装,可以方便以后直接使用[使用时将封装好的jar包直接导入工程中即可使用] 上传文件核心代码 1 package com.lizhou.fileload; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOExcepti

用struts2实现文件的上传下载

在做B/S系统时经常会有文件上传下载的需求,现就基于struts2框架实现其功能 Struts2框架默认采用Commons-fileupload组件完成文件上传功能.? 使用Struts2框架实现文件上传功能,只需在Action中定义一个java.io.File类型的成员并为之设立setter方法,方法名要和参数名对应.? 客户端上传的文件, Struts2框架会自动将其保存在临时文件中,封装成java.io.File类对象.如果还想得到上传的文件名和文件类型,需按照如下命名规则在Action中

Hadoop之HDFS原理及文件上传下载源码分析(上)

HDFS原理 首先说明下,hadoop的各种搭建方式不再介绍,相信各位玩hadoop的同学随便都能搭出来. 楼主的环境: 操作系统:Ubuntu 15.10 hadoop版本:2.7.3 HA:否(随便搭了个伪分布式) 文件上传 下图描述了Client向HDFS上传一个200M大小的日志文件的大致过程: 首先,Client发起文件上传请求,即通过RPC与NameNode建立通讯. NameNode与各DataNode使用心跳机制来获取DataNode信息.NameNode收到Client请求后,

Java Web(十二) commons-fileupload上传下载

今天心态正常...继续努力.. --WH 一.上传原理和代码分析. 上传:我们把需要上传的资源,发送给服务器,在服务器上保存下来. 下载:下载某一个资源时,将服务器上的该资源发送给浏览器. 难点:服务器端获取资源时比较麻烦, 浏览器端 注意:enctype=multipart/form-data:该属性表明发送的请求体的内容是多表单元素的,通俗点讲,就是有各种各样的数据,可能有二进制数据,也可能有表单数据,等等,所以使用该属性也进行其区分,发送的格式如下(使用火狐中的Firebug插件进行捕捉的

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

使用Paramiko实现SSH登陆,文件上传下载

1,SSh登陆命令行实现: #!/usr/bin/env python # encoding: utf-8 import paramiko private_key_path = '/Users/aolens/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(private_key_path) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.Aut

文件上传下载—servlet API实现

servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servl