FileUpload实现文件上传(包含多文件)

简介:
package com.hzml.serve;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
 
@WebServlet("/FileUploadServlet")
public class FileUploadServlet extends HttpServlet {
    private String filePath;    // 文件存放目录  
    private String tempPath;    // 临时文件目录  
    // 初始化  
    public void init() throws ServletException  
    {  
        super.init();  
        // 从配置文件中获得初始化参数  
        ServletContext context = getServletContext();  
        filePath = context.getRealPath("/") + "/hzmlFile";  
        tempPath = context.getRealPath("/") + "/hzmlFile";  
        System.out.println("文件存放目录、临时文件目录准备完毕 ...");  
    }  
    
    private void process(HttpServletRequest req, HttpServletResponse res)  
            throws IOException, ServletException{
         res.setContentType("text/plain;charset=gbk");  
         PrintWriter pw = res.getWriter();  
         try{  
             DiskFileItemFactory diskFactory = new DiskFileItemFactory();  
             // threshold 极限、临界值,即硬盘缓存 1M  
             diskFactory.setSizeThreshold(4 * 1024);  
             // repository 贮藏室,即临时文件目录  
             diskFactory.setRepository(new File(tempPath));  
           
             ServletFileUpload upload = new ServletFileUpload(diskFactory);  
             // 设置允许上传的最大文件大小 4M  
             upload.setSizeMax(4 * 1024 * 1024);  
             // 解析HTTP请求消息头  
             List fileItems = upload.parseRequest(req);  
             Iterator iter = fileItems.iterator();  
             while(iter.hasNext())  
             {  
                 FileItem item = (FileItem)iter.next();  
                 if(item.isFormField())  
                 {  
                     System.out.println("处理表单内容 ...");  
                     processFormField(item, pw);  
                 }else{  
                     System.out.println("处理上传的文件 ...");  
                     processUploadFile(item, pw);  
                 }  
             }// end while()  
  
             pw.close();  
         }catch(Exception e){  
             System.out.println("使用 fileupload 包时发生异常 ...");  
             e.printStackTrace();  
         }// end try ... catch ...  
    }
      
    public void doPost(HttpServletRequest req, HttpServletResponse res)  
        throws IOException, ServletException  {  
        process(req, res);
    }
 
    
 
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        process(req, res);
    }

    // 处理表单内容  
    private void processFormField(FileItem item, PrintWriter pw)  
        throws Exception  
    {  
        String name = item.getFieldName();  
        String value = item.getString();          
        pw.println(name + " : " + value + "\r\n");  
    }  
      
    // 处理上传的文件  
    private void processUploadFile(FileItem item, PrintWriter pw)  
        throws Exception  
    {  
        // 此时的文件名包含了完整的路径,得注意加工一下  
        String filename = item.getName();         
        System.out.println("完整的文件名:" + filename);  
        int index = filename.lastIndexOf("\\");  
        filename = filename.substring(index + 1, filename.length());  
 
        long fileSize = item.getSize();  
 
        if("".equals(filename) && fileSize == 0)  
        {             
            System.out.println("文件名为空 ...");  
            return;  
        }  
        pw.println(filePath);
        File uploadFile = new File(filePath + "/" + filename);  
        item.write(uploadFile);  
        pw.println(filename + " 文件保存完毕 ...");  
        pw.println("文件大小为 :" + fileSize + "\r\n");  
    }
}









本文转自 小眼儿 博客园博客,原文链接:http://www.cnblogs.com/hujunzheng/p/4574453.html,如需转载请自行联系原作者
目录
相关文章
|
人工智能 达摩院 并行计算
中文语音识别转文字的王者,阿里达摩院FunAsr足可与Whisper相颉顽
君不言语音识别技术则已,言则必称Whisper,没错,OpenAi开源的Whisper确实是世界主流语音识别技术的魁首,但在中文领域,有一个足以和Whisper相颉顽的项目,那就是阿里达摩院自研的FunAsr。 FunAsr主要依托达摩院发布的Paraformer非自回归端到端语音识别模型,它具有高精度、高效率、便捷部署的优点,支持快速构建语音识别服务,最重要的是,FunASR支持标点符号识别、低语音识别、音频-视觉语音识别等功能,也就是说,它不仅可以实现语音转写,还能在转写后进行标注,一石二鸟。
中文语音识别转文字的王者,阿里达摩院FunAsr足可与Whisper相颉顽
|
机器学习/深度学习 人工智能 自然语言处理
DeepRant:一款专为国际游戏玩家设计的翻译工具,一键翻译聊天对话,无需切出游戏
专为游戏玩家设计的多语言快捷翻译工具,支持多种翻译模式和主流语言,基于Tauri和React开发。
996 12
DeepRant:一款专为国际游戏玩家设计的翻译工具,一键翻译聊天对话,无需切出游戏
|
存储 缓存 数据可视化
(七)解析Streamlit的数据元素:探索st.dataframe、st.data_editor、st.column_config、st.table、st.metric和st.json的神奇之处(上)
(七)解析Streamlit的数据元素:探索st.dataframe、st.data_editor、st.column_config、st.table、st.metric和st.json的神奇之处
7057 0
|
11月前
|
人工智能 Prometheus 监控
监控vLLM等大模型推理性能
本文将深入探讨 AI 推理应用的可观测方案,并基于 Prometheus 规范提供一套完整的指标观测方案,帮助开发者构建稳定、高效的推理应用。
1819 169
监控vLLM等大模型推理性能
|
8月前
|
存储 人工智能 前端开发
Google揭秘Agent架构三大核心:工具、模型与编排层实战指南
本文为Google发布的Agent白皮书全文翻译。本文揭示了智能体如何突破传统AI边界,通过模型、工具与编排层的三位一体架构,实现自主推理与现实交互。它不仅详解了ReAct、思维树等认知框架的运作逻辑,更通过航班预订、旅行规划等案例,展示了智能体如何调用Extensions、Functions和Data Stores,将抽象指令转化为真实世界操作。文中提出的“智能体链式组合”概念,预示了未来多智能体协作解决复杂问题的革命性潜力——这不仅是技术升级,更是AI赋能产业的范式颠覆。
2615 1
|
Python
ARCGIS PRO DSK GraphicsLayer创建文本要素
ARCGIS PRO DSK GraphicsLayer创建文本要素
969 5
|
SQL 分布式计算 Hadoop
Apache Hive 帮助文档
Apache Hive 帮助文档
727 9
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
327 2
|
人工智能 分布式计算 数据可视化
大模型私有化部署全攻略:硬件需求、数据隐私、可解释性与维护成本挑战及解决方案详解,附示例代码助你轻松实现企业内部AI应用
【10月更文挑战第23天】随着人工智能技术的发展,企业越来越关注大模型的私有化部署。本文详细探讨了硬件资源需求、数据隐私保护、模型可解释性、模型更新和维护等方面的挑战及解决方案,并提供了示例代码,帮助企业高效、安全地实现大模型的内部部署。
2861 2
|
人工智能 Oracle Java
蚂蚁 CodeFuse 代码大模型技术解析:基于全仓库上下文的代码补全
CodeFuse 代码补全插件是 CodeFuse 系列产品中用户数量最多、留存率最大,调用AI能力最多的产品~欢迎大家体验试用https://github.com/codefuse-ai/RepoFuse
2560 7
蚂蚁 CodeFuse 代码大模型技术解析:基于全仓库上下文的代码补全