[原创] fileupload  文件上传_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
3
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3241 | 回复: 2   主题: [原创] fileupload  文件上传        下一篇 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2014-12-19 16:59:08 | [全部帖] [楼主帖] 楼主

解析从表单上传的文件(图片)等,可以使用fileupload 包 来简化操作过程。它能将页面上的表单和文件分离开来

方法解析 HTTP 请求(即被包装之后的 HttpServletRequest 对象)出来,即分离出具体的文本表单和上传文件;而 ServletFileUpload 对象的创建需要依赖于 FileItemFactory 工厂将获得的上传文件 FileItem 对象保存至服务器硬盘,即 DiskFileItem 对象。

JavaWeb中的文件上传注意事项:

1、也是最容易忽略的一点:把JSP页面的<form>添加ENCTYPE="multipart/form-data"

2、加入第三方文件上传的API到项目中,在这里使用apache的jakarta项目的commons-*包里的API

3、文件上传步骤:

 1)、首先调用ServletFileUpload.isMultipartContent(request)返回一个boolean值,如果是true

 则表示request支持文件上传,这里可以加测试语句,如果是false就知道是在request出了问题,

 可能就是传递request的jsp中的<form>没有添加ENCTYPE="multipart/form-data"
2)、FileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload up=new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
item.isFormField()  //用来判断当前对象是否是file表单域的数据  如果返回值是true说明不是 就是普通表单域  


关键Java 代码举例

1.首先我们应该为上传的文件建一个存放的位置,一般位置分为临时和真是文件夹,那我们就需要获取这俩个文件夹的绝对路径,在servlet中我们可以这样做

ServletContext application = this.getServletContext();
String tempDirectory = application.getRealPath(Constant.TEMP_DIRECTORY) + "/";
String realDirectory = application.getRealPath(Constant.REAL_DIRECTORY) + "/";


然后建立文件工厂即仓库一个参数表示存放多大后flush,

FileItemFactory factory = new DiskFileItemFactory(Constant.SIZE_THRESHOLD,new File(tempDirectory));
ServletFileUpload upload = new ServletFileUpload(factory);


2.对上传的文件进行设定

[java] view plaincopy
upload.setSizeMax(500*1024*1024);//设置该次上传最大值为500M  


3,.解析请求正文,获取上传文件,不抛出异常则写入真是路径

public void s(HttpServletRequest request) throws Exception
{
      DiskFileItemFactory diskFactory = new DiskFileItemFactory();
      // threshold 极限、临界值,即硬盘缓存 1M
      diskFactory.setSizeThreshold(4 * 1024);
      // repository 贮藏室,即临时文件目录
      diskFactory.setRepository(new File("d:\\temp"));
      ServletFileUpload upload = new ServletFileUpload(diskFactory);
      // 设置允许上传的最大文件大小 4M
      upload.setSizeMax(4 * 1024 * 1024);
      List<FileItem> list = upload.parseRequest(request);
      Iterator<FileItem> iter = list.iterator();
      while (iter.hasNext())
      {
            FileItem item = iter.next();
            // item.isFormField()用来判断当前对象是否是file表单域的数据 如果返回值是true说明不是 就是普通表单域
            if (item.isFormField())
            {
                  System.out.println("普通表单域" + item.getFieldName());
                  System.out.println(item.getString("utf-8"));
            }
            else
            {
                  // System.out.println("file表单域" + item.getFieldName());
                  String lastpath = item.getName();// 获取上传文件的名称
                  lastpath = lastpath.substring(lastpath.lastIndexOf("."));
                  String filename = item.getName();
                  if ("".equals(filename) && item.getSize() == 0)
                  {
                        System.out.println("文件名为空 ...");
                        return;
                  }
                  item.write(new File(filename));
                  System.out.println(filename + " 文件保存完毕 ...");
            }
      }
}




赞(0)    操作        顶端 
yaoxia.wu
注册用户
等级:中校
经验:2318
发帖:53
精华:1
注册:1970-1-1
状态:离线
发送短消息息给yaoxia.wu 加好友    发送短消息息给yaoxia.wu 发消息
发表于: IP:您无权察看 2015-1-19 23:00:48 | [全部帖] [楼主帖] 2  楼

北京联动北方科技有限公司



赞(0)    操作        顶端 
tuhao
注册用户
等级:少尉
经验:339
发帖:2
精华:0
注册:2015-5-6
状态:离线
发送短消息息给tuhao 加好友    发送短消息息给tuhao 发消息
发表于: IP:您无权察看 2015-5-6 9:08:30 | [全部帖] [楼主帖] 3  楼

 if ("".equals(filename) && item.getSize() == 0)

{

    System.out.println("文件名为空 ...");

    continue;

}



赞(0)    操作        顶端 
总帖数
3
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论