Java文件上传【通用】

2023-10-26

Java文件上传 主要是针对于网页来说,一般是通过input的file类型上传文件流到后台,再通过后台处理将文件移动到指定位置达到上传的目的。
这里贴代码时,主要是以springboot框架为例,但是是通用的。
1、表单提交上传

<form enctype="multipart/form-data" method="post" action="/upload">
    文件:<input type="file" name="fileUpload"/>
    <input type="submit" value="上传"/>
</form>
@RequestMapping("/upload")
    public String upload(MultipartFile fileUpload) throws IOException{
        //获取文件名
        String fileName = fileUpload.getOriginalFilename();
        //获取文件后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        //重新生成文件名
        fileName = UUID.randomUUID()+suffixName;
        //指定本地文件夹存储图片
        String filePath = "D:/idea/IdeaProjects/springbootdemo/src/main/resources/static/";
        fileUpload.transferTo(new File(filePath+fileName)); 
        return "index";     
    }

提交表单的话会刷新界面,一般不推荐,但这是比较简单的方法,一般推荐使用ajax提交。

2、ajax提交上传(FormData)

<script>
function uploadHead() {
		var formData = new FormData();
		var file = $('#file')[0].files[0];
		formData.append("upload",file);
		$.ajax({
			url:"/uploadHead",
			async:true,
			processData: false,   // jQuery不要去处理发送的数据
			contentType: false,   // jQuery不要去设置Content-Type请求头
			type:"POST",
			data: formData,
			success:function (data) {
				if(data=="1"){
					alert("上传成功");
				}else{
					alert("上传失败");
				}
			},
			error:function () {
				alert("更新失败");
			},
			dataType:"text"
		});
	}
</script>
<input type="file" name="multipartFile" class="fileInput" id="file" >
<input type="button" onclick="uploadHead();">
//我将上传文件做成工具类:
 /**
     * 上传文件
     * @param upload
     * @param path
     * @return
     * @throws IOException
     */
    public String UploadFile(MultipartFile upload,String path) throws IOException {
        //判断该路径是否存在
        File file = new File(path);
        if (!file.exists()) {
            //如果这个文件夹不存在的话,就创建这个文件
            file.mkdirs();
        }
        //获取上传文件名称
        String filename = upload.getOriginalFilename();
        System.out.println(filename);
        //把文件名称设置成唯一值 uuid 以防止文件名相同覆盖
        String uuid = UUID.randomUUID().toString().replace("-", "");
        //新文件名
        filename = uuid + "_" + filename;
        System.out.println(filename);
        //完成文件上传
        upload.transferTo(new File(path, filename));
        String filePath = "upload/" + filename;
        return filePath;
    }

//这里的话是已经将文件上传并即将图片记录在数据库并更换(mybatis)
@RequestMapping("uploadHead")
    public void ReturnHead(HttpServletRequest request, HttpServletResponse response, MultipartFile upload) throws IOException {
        User userSession = (User) request.getSession(true).getAttribute("userSession");
        OperateFile operateFile = new OperateFile();
        if (userSession!=null){
            String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload";
            //System.out.println(path);
            String filePath = operateFile.UploadFile(upload,path);//文件上传成功
            String filename = upload.getOriginalFilename();
            String fileUuid = UUID.randomUUID().toString().replace("-", "");
            Img img = new Img();//进行图片记录
            img.setUuid(fileUuid);
            img.setImg_name(filename);
            img.setImg_type(1);
            img.setImg_path(filePath);
            img.setNote(userSession.getUuid()+"用户上传");
            int c = userService.addImg(img);
            if (c>0){
                User u1 = new User();
                u1.setUuid(userSession.getUuid());
                u1.setImg_uuid(fileUuid);
                int c1 = userService.updateHead(u1);
                if (c1>0){
                    response.getWriter().write("1");
                }else{
                    response.getWriter().write("0");
                }
            }else{
                response.getWriter().write("0");
            }
        }
    }

注意:获取当前项目存储路径的问题

//一般适用,指当前项目下的upload文件夹下
String path = request.getSession().getServletContext().getRealPath("/upload/");

//springboot比较特殊,需要放在static文件夹下路径
String path = ResourceUtils.getURL("classpath:").getPath() + "static/upload";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java文件上传【通用】 的相关文章

  • JS ProgressEvent 仅在完成时触发

    我在使上传进度条正常工作时遇到一些问题 根据 XMLHttpRequest Level 2 规范 我附加了用于加载启动和进度的事件侦听器 如下所示 var xhr ajaxSettings xhr xhr upload addEventLi
  • 如何使用 Google Apps 脚本和 Discord Webhook 将图像上传到 Discord?

    我编写了以下脚本 function uploadImageToDiscord var link https i imgur com image jpg var img UrlFetchApp fetch link getBlob var d
  • 我可以信任 $_FILES 中的文件类型吗?

    我可以信任来自的文件类型吗 FILES上传图片时 或者我必须再次检查exif imagetype 来自文档 http www php net manual en features file upload post method php 文件
  • Jquery/HTML5/Ajax上传进度条?

    我正在开发一个简单的 S3 上传器 让它执行并完成我需要做的事情 但是 我想知道是否有一个易于创建上传进度条的方法 在浏览器的底部 有一条浏览器消息 上面写着 正在上传 是否有任何人知道有关该消息的文章以显示加载栏 理想情况下 该变量将传递
  • 在 iOS 中从 Amazon S3 请求校验和 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我开发了一个 iOS 应用程序 可以将更大的视频上传到 AWS S3 服务器 我已将 MD5 校验和集成到我的 put 请求中 以便在
  • iOS上传.pdf文件

    如何使用 iOS 版 Objective C 上传文件 我真的被困住了 我可以使用 UIImagePickerController 上传图像 但是 pdf doc 文件有这样的功能吗 提前谢谢了 不 没有 假设您的意思是属于 iBooks
  • 如何使 Flex 文件上传在 Firefox 和 safari 上正常工作?

    我有一个将文件上传到服务器的 Flex 应用程序 服务器需要身份验证才能上传 在 IE 中上传工作正常 但在 FF 和 Safari 中 它不上传 我见过很多人都有同样的问题 但没有答案 现在不要让我失望 stackoverflowers
  • Multer文件上传错误,请求挂起

    我以前从未写过问题 因为我总是在提问之前在这里找到问题的答案 然而 我在 Express 上的文件上传 POST 路由上的 fileFilter 函数上遇到了困难 我在路由中使用了 multer 上传功能 也作为中间件 后面有一个错误处理中
  • 如何将图像路径和名称上传到数据库 - Codeigniter

    我知道这个问题已经被问过好几次了 但是我发现的所有其他问题都与我想要的不同 我想将文件名和文件路径上传到名为 工厂图像 的表 这样做的最佳方法是什么 我的控制器功能 function do upload config upload path
  • PHP Ajax上传进度条

  • 如何使用Delphi 2010优化上传例程?

    My 尚未发布Delphi 2010 应用程序允许用户将他们的文件上传到我的服务器 现在我使用 HTTPS POST 发送文件 简化的 算法基本上是 将文件拆分为 片 每个片 256KB 对于每个切片 将其 POST 到服务器 IE 对于
  • 使用 PHP 上传 DOC 或 PDF

    我可以很好地上传图像 但是当我将类型从 image jpg image gif 更改为 application msword 和 application pdf 时 它不起作用 这是我的代码 完全相同的代码适用于图像 但对于上传文档和 pd
  • 在 Rails 中使用回形针进行 ajax 上传的简单方法?

    我想知道是否有一个简单的方法 例如一个插件 用回形针在 Rails 中进行 ajax 上传 还是我必须从头开始构建它 Cheers 编辑 另外 我正在寻找非闪存解决方案 你可以试试remotipart http os alfajango c
  • 在php中生成随机字符串作为文件名[重复]

    这个问题在这里已经有答案了 我将如何创建与文件名一起使用的随机文本字符串 我正在上传照片并在完成后重命名它们 所有照片都将存储在一个目录中 因此它们的文件名必须是唯一的 有这样做的标准方法吗 有没有办法在尝试覆盖之前检查文件名是否已经存在
  • 使用 PHP SDK 在亚马逊 S3 上上传文件

    我正在尝试通过 PHP SDK 在我的亚马逊 S3 存储桶上上传文件 但是我的脚本不起作用 我有一个空白页面 没有任何错误或异常消息 编辑 在 php ini 中启用 display error 后 我有下面的错误消息 看起来 sdk 在我
  • PHP 一次只能看到 20 个上传文件

    当我尝试一次上传超过 20 个文件时 网络服务器只能看到前 20 个文件 任何其他文件都会被忽略 问题是什么 简单的代码可以尝试
  • html 文件上传的默认文件夹和文件名

    我正在使用 jQuery Ajax 插件将图像文件从本地计算机上传到网络服务器 该网页呈现一个标记为Upload Image File 用户按下按钮并从浏览器显示的弹出目录列表中选择要上传的文件 服务器上的 PHP 存储图像文件 一切正常
  • 上传非常大的文件(>5GB)

    我需要你的帮助 我想用 HTML JQuery 和 PHP 创建一个上传脚本 是否可以编写一个可以上传非常大的文件 gt 5 GB 的脚本 我已经尝试使用 FileReader FormData 和 Blobs 但即使使用这些 我也无法上传
  • 上传进度条 Java Servlet?

    我想使用 servlet 显示上传进度条 我尝试过Ajax iFrame 技术 页面没有重新加载 文件也被上传 但是 进度条没有出现 有没有可用于 javaservlts 的 jQuery 进度插件 Thanks 我强烈推荐jQuery 上
  • ant-d upload中如何为removeFile添加PopConfirm一个图片文件

    我正在使用 Ant d Upload 通过本地系统上传文件 然后单击文件预览图像上的删除图标 图像文件将被删除 我想添加一个弹出确认 所以我尝试在 onRemovefunction 中添加确认作为承诺但它不起作用 它在浏览器中显示警报 on

随机推荐

  • 带环的单链表

    前面一篇文章介绍了单链表的一些基础操作 本文接着来看一些有环的单链表的操作 判断单链表是否存在环 求环的入口节点 环的长度 看以下程序 链表类 class LinkQueue Entry head new Entry 节点类 用于节点初始化
  • topaz全家桶_每个设计师都该拥有的设计辅助神器:全新Topaz2020全家桶送给你

    每个设计师都该拥有的设计辅助神器 全新Topaz2020全家桶送给你 领取方式见文章末尾 2020年 人工智能已经渗透到各个行业 今天资源君给伙伴们带来一整套人工智能软件全家桶 这套 Topaz2020全家桶 拥有强大的图片和视频编辑功能
  • linux下网速测试

    linux下网速测试 speedtest 是一个知名的网速测试工具 它是用 Python 写成的 可以使用 apt 或 pip 命令来安装 安装 sudo apt install speedtest cli 或者 pip3 install
  • C语言:利用指针编写程序,统计输入的字符串中大写字母、小写字母和数字字符的数量

    题目来源 大工慕课 链接 作者 Caleb Sung 题目要求 利用指针编写程序 统计输入的字符串中大写字母 小写字母和数字字符的数量 参考代码 include
  • Google Mock

    源码分析 通过 Google Mock Gmock 简单使用和源码分析 简单使用 中的例子 我们发现被mock的相关方法在mock类中已经被重新实现了 否则它们也不会按照我们的期待的行为执行 我们通过阅读源码 来分析整个过程的实现逻辑 转载
  • 输入一个整数n,输出数列1+1/3+1/5+……前n项的和。

    include
  • React 学习笔记目录

    学习使用的开发工具 编译器 VSCode 开发语言工具 TypeScript JavaScript 重要程度分类 一般 这个程度的知识点主要是达到熟练掌握即可 不用太深入研究和学习 重要 这个程度的知识点主要是达到熟练掌握 并且内部的原理切
  • 2核4G云服务器可以支持多少个网站数量?多维度权衡

    2核4G服务器可以安装多少个网站 阿腾云2核4G5M带宽服务器目前安装了14个网站 从技术角度是没有限制的 只要云服务器性能够用 想安装几个网站就安装几个网站 但是从公网带宽和CPU计算性能方面考虑 要计算网站访问量并发数 阿腾云来详细说下
  • 第七章——数据挖掘(1)

    一 数据挖掘的概述 1 数据挖掘概念与发展 随着科学技术的飞速发展 使得各个领域或组织机构积累了大量数据 如何从这些数据中提取有用的信息和知识以帮助做出明智决策成为巨大的挑战 计算机技术的迅速发展使得处理并分析这些数据成为可能 这种技术就是
  • 一个简易的区块链demo

    别人写的python版本 python版本源码地址 https github com dvf blockchain installation 环境准备 我使用的是ubuntu 16 04 其它linux版本也可以 需要安装python3 6
  • Android10(Q)系统启动概述

    Android10系统启动概述 一 init进程启动 二 zygote进程启动 三 SystemServer进程启动 四 AMS服务启动 首先用一张图看一下整体的启动流程 因为android系统底层是基于Linux Kernel 所以当Ke
  • LLVM编译流程详解

    LLVM 什么是LLVM LLVM项目是一系列分模块 可重用的编译工具链 它提供了一种代码编写良好的中间表示 IR 可以作为多种语言的后端 还可以提供与变成语言无关的优化和针对多种cpu的代码生成功能 传统编译器分为三个阶段 前端 gt 优
  • 下个版本已定!C++自救新动作!

    自去年年底 美国安全局 NSA 在其所发布的 Software Memory Safety 报告中点名批评C 之后 C 之父Bjarne Stroustrup一顿回怼后 做出决定 内部自救 现在 就让我们看看下一个版本的C 究竟有哪些大动作
  • Jetlinks物联网平台部署

    前端部署 用git拉取前端代码 git clone https github com jetlinks jetlinks ui antd git 使用yarn打包推荐 命令在项目根目录下执行 yarn install yarn run bu
  • 8:操作模式3-interrupt mode

    1 前言 eMMC总线操作包含 boot mode device identification mode interrupt mode data transfer mode 本文主要描述interrupt mode interrupt mo
  • 第一个JDBC程序

    JDBC 1 数据库驱动 例如 声卡 显卡 驱动等 2 JDBC SUN公司为了简化开发人员的 对数据库的统一 操作 提供了一个 Java操作数据库的 规范 俗称JDBC这些规范的实现由具体的厂商去做 对于开发人员来说 我们只需要掌握JDB
  • 【线性代数】逆矩阵的求解过程

    一 方阵的行列式 二 逆矩阵 2 1 使用Numpy 求例2的逆矩阵 import numpy as np A np mat 1 2 3 2 2 1 3 4 3 print 计算A行列式的值 print np linalg det A pr
  • Boost升压电路学习框架

    此文为个人学习框架 如有错误请大家指点 目录 一 Boost电路是什么 二 为什么要用Boost电路 1 还有什么升压电路 其区别是什么 三 Boost电路的模式 1 Boost开环电路 1 1Boost开环电路是什么 1 2Boost开环
  • 软考-软件设计师-数据库1-体系结构-模型-关系代数-规范化

    1 数据库技术基础 2 基本概念 数据库系统DBS 是一个采用了数据库技术 有组织地 动态地存储大量有关数据 方便多用户访问的计算机系统 其由下面四个部分组成 数据库 统一管理 长期存储在计算机内的 有组织的相关数据的集合 硬件 构成计算机
  • Java文件上传【通用】

    Java文件上传 主要是针对于网页来说 一般是通过input的file类型上传文件流到后台 再通过后台处理将文件移动到指定位置达到上传的目的 这里贴代码时 主要是以springboot框架为例 但是是通用的 1 表单提交上传