HS_红生 2016-12-09 02:58 采纳率: 0%
浏览 1581

在使用fileupload上传文件时,文件内容的是表单中的普通字段,而不是源文件

使用fileupload,上传文件时,获取的文件名都正常,只有上传后的文件里面保存的是表单中的文本域,而不是原文件了,求解啊!!
这是我的servlet

 response.setContentType("text/html; charset=UTF-8");
    response.setHeader("Cache-Control", "no-cache");
    PrintWriter out = response.getWriter();
    //从请求对象上获取session
    HttpSession session = request.getSession();

    // 使用Apache Common组件中的fileupload进行文件上传
    //创建文件项工厂
    DiskFileItemFactory df=new DiskFileItemFactory();
    //极限、临界值,即硬盘缓存 1M  
    df.setSizeThreshold(1024*1024);
    //贮藏室,即临时文件目录 
    df.setRepository(new File("D:/testFileUp"));

    //负责上传文件的对象
    //a.负责处理上传的文件数据   b.将每部分数据封装到FileItem对象中    c.将数据写入到临时文件目录中
    ServletFileUpload upload=new ServletFileUpload(df);

    //设置上传单个文件的最大容量50M
    upload.setFileSizeMax(50*1024*1024);


    Date date=new Date();
    dirFormatter=new SimpleDateFormat("yyyyMM");





    //定义表单文件名,表单中文件说明
    String fileNameLong=null;
    String fileState=null;

    try
    {
        //解析请求对象
        List<FileItem> items = upload.parseRequest(request);

        //map集合用于存储文件项中的数据
        Map<String, Object> fields=new HashMap<String, Object>();



        FileItem item=null;

        for (int i = 0; i <items.size(); i++) {

        item=(FileItem) items.get(i);
        //对文件项做判断
        if(item.isFormField()){
            //表单中的普通字段
            fields.put(item.getFieldName(), item.getString("UTF-8"));
            fileState=item.getString("UTF-8");//保存文件说明
        }else{
            fields.put(item.getName(), item);
            fileNameLong=item.getName();//保存文件名

        }
        }
                    //获取文件后缀名
        String ext=getExtension(fileNameLong);

        //设置上传文件名(保存后的文件名)
        String newfilename=date.getTime()+"."+ext;

        //设置上传路径
        String filePath="/XgxzUploadFile/"+dirFormatter.format(date);


        // 判断文件夹是否存在,不存在则创建
        File dirTest = new File(filePath);
        if (!dirTest.exists())
        {
        dirTest.mkdirs();
        }
        //文件路径+生成后文件名
        String newPathName=filePath+"/"+newfilename;
        //写入文件(上传文件)
//      item.write(new File(newPathName));

        //获取item中的上传文件的输入流
        InputStream input = item.getInputStream();
        //创建一个文件输出流
        FileOutputStream output = new FileOutputStream(newPathName);
        //创建一个缓冲区
        byte[]b=new byte[1024];
        //判断输入流中的数据是否已经读完的标示
        int len=0;

        //循环将输入流读入到缓冲区当中,(len=input.read(b))>0就表示in里面还有数据
        while((len=input.read(b))>0){
        //使用outputStream输出流将缓冲区的数据写入到指定的目录(newPathName)当中
        output.write(b, 0, len);
        }

        output.flush();

        input.close();
        output.close();
        item.delete();
  • 写回答

1条回答 默认 最新

  • dabocaiqq 2016-12-10 15:21
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题