使用JAVA文件上传的几种方式

Java中实现文件上传 1. springmvc的文件上传: 1.第一种文件上传到本地服务器下。 2.第二种文件上传到oss服务器上。[阿里云] 2. 第一种的缺陷:集群项目无法共享本地上传后的文件 3. 文件上传的步骤: 1.引入commons-fileupload依赖 oss依赖 2.配置文件上传解析器.CommonsMultipartResolver. 3.创建文件上传的表单: 提交方式。 entype编码: 4.编写代码; 阅读详情

通过文件地址上传文件

1、webUtil工具类下载图片如下

public static void downloadImgByNet(String ServerfilePath,String filePath,String fileName){
        try{
            URL url = new URL(ServerfilePath);
            URLConnection conn = url.openConnection();
            //设置超时间为3秒
            conn.setConnectTimeout(3*1000);
            //防止屏蔽程序抓取而返回403错误
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            //输出流
            InputStream str = conn.getInputStream();

            //控制流的大小为1k
            byte[] bs = new byte[1024];

            //读取到的长度
            int len = 0;

            //是否需要创建文件夹
            File saveDir = new File(filePath);
            if(!saveDir.exists()){
                saveDir.mkdir();
            }
            File file = new File(saveDir+ File.separator+fileName);

            //实例输出一个对象
            FileOutputStream out = new FileOutputStream(file);
            //循环判断,如果读取的个数b为空了,则is.read()方法返回-1,具体请参考InputStream的read();
            while ((len = str.read(bs)) != -1) {
                //将对象写入到对应的文件中
                out.write(bs, 0, len);
            }

            //刷新流
            out.flush();
            //关闭流
            out.close();
            str.close();

            System.out.println("下载成功");

        }catch (Exception e) {
            e.printStackTrace();
        }
    }

** 2、上传图片接口**

@Value("${uploadfile.fileLoadPath}")
    String fileLoadPath="E:\\test";


    @RequestMapping(method = RequestMethod.POST, value = "/fileUpload")
    public void ChangeState(@RequestBody Map param, HttpServletRequest request,
                            HttpServletResponse response){
        String UploadfilePath="";
        if (param.get("UploadfilePath")!=null){
            UploadfilePath=param.get("UploadfilePath").toString();
        }
        String fileName="";
        if (param.get("fileName")!=null){
            fileName=param.get("fileName").toString();
        }
        WebUtil.downloadImgByNet(UploadfilePath,fileLoadPath,fileName);
    }

通过文件传入并存放服务器

@Value("${uploadfile.fileLoadPath}")
    String fileLoadPath="E:\\test";
    /**
     * 文件的上传
     * @param file
     * @return
     */
    @RequestMapping(value = "/uploads",method = RequestMethod.POST)
    public void upload(@RequestParam("file") MultipartFile file, HttpServletResponse response) {
        // 判断文件是否为空
        String path = fileLoadPath;
        HashMap<String, String> message = new HashMap<>();
        if (!file.isEmpty()) {
            try {
                // 文件保存路径
                String filePath = path + "/" + file.getOriginalFilename();
                if (!new File(filePath).exists()){
                    new File(filePath).mkdirs();
                }
                // 转存文件
                file.transferTo(new File(filePath));
                message.put("status", filePath);
            } catch (Exception e) {
//                e.printStackTrace();
                message.put("status", "error");
            }
        }
        renderResult(response, message);
    }

上传并生成随即名

@Value("${uploadfile.fileLoadPath}")
    String fileLoadPath="E:\\test";
    /**
     * 文件的上传
     * @param file
     * @return
     */
    @RequestMapping(value = "/upload",method = RequestMethod.POST)
    public void upload(@RequestParam("file") MultipartFile file, HttpServletResponse response) {
        // 判断文件是否为空
        String path = fileLoadPath;
        HashMap<String, String> message = new HashMap<>();
        if (!file.isEmpty()) {
            try {
                // 文件保存路径
//                String filePath = path + "/" + file.getOriginalFilename();
                String suffixName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));      //获取文件的后缀名
                String filePath = path+"\\"+UUID.randomUUID().toString().replace("-","")+suffixName;        //拼接
                if (!new File(filePath).exists()){
                    new File(filePath).mkdirs();
                }
                // 转存文件
                file.transferTo(new File(filePath));
                message.put("status", filePath);
            } catch (Exception e) {
//                e.printStackTrace();
                message.put("status", "error");
            }
        }
        renderResult(response, message);
    }

以base64编码上传文件

以下为base64的编码和解码的工具类

public class FileBase64Utils {
    /**
     * 本地文件(图片、excel等)转换成Base64字符串
     *
     * @param file      接受的文件
     */
    public static String convertFileToBase64(MultipartFile file) {
        byte[] data = null;
        // 读取图片字节数组
        try {
            InputStream in = file.getInputStream();
//            InputStream in = new FileInputStream(imgPath);
            System.out.println("文件大小(字节)=" + in.available());
            data = new byte[in.available()];
            in.read(data);
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 对字节数组进行Base64编码,得到Base64编码的字符串
        Base64.Decoder decoder = Base64.getDecoder();
        Base64.Encoder encoder = Base64.getEncoder();
        String base64Str = encoder.encodeToString(data);
        return base64Str;
    }

    /**
     * 将base64字符串,生成文件
     */
    public static File convertBase64ToFile(String fileBase64String, String filePath, String fileName) {

        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;
        try {
            File dir = new File(filePath);
            if (!dir.exists() && dir.isDirectory()) {//判断文件目录是否存在
                dir.mkdirs();
            }
            Base64.Decoder decoder = Base64.getDecoder();
            Base64.Encoder encoder = Base64.getEncoder();
//            BASE64Decoder decoder = new BASE64Decoder();
            byte[] bfile = decoder.decode(fileBase64String);

            file = new File(filePath + File.separator + fileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bfile);
            return file;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
            }
        }
    }
}

上传附件的接口如下

/**
     * 附件上传接口
     * @param request
     * @param response
     * @param file      前端传来的附件
     */
    @RequestMapping(method = RequestMethod.POST, value = "/uploadFile")
    public void uploadFile(HttpServletRequest request,
                           HttpServletResponse response,  MultipartFile file){
        Map<String,Object> res = new HashMap<String, Object>();
        try{
            long start = System.currentTimeMillis();        //获取开始的时间
            String filename = file.getOriginalFilename();       //获取文件名
            String imgBase64Str = FileBase64Utils.convertFileToBase64(file);   //使用base64对文件编码成字符串格式
            System.out.println("Base64字符串length=" + imgBase64Str.length());     //得到编码后的长度
//            如果文件不存在,则创建
            if (!new File(ServerloadPath).exists()){
                new File(ServerloadPath).mkdirs();
            }
//            重新将字符串解码为文件类型并上传
            File file1 = FileBase64Utils.convertBase64ToFile(imgBase64Str, ServerloadPath, filename);
            assert file1 != null;
            String absolutePath = file1.getAbsolutePath();
//            输入花费时间
            System.out.println("duration:" + (System.currentTimeMillis() - start));
//            返回存放地址
            res.put("filePath", absolutePath);
            res.put("duration",System.currentTimeMillis() - start+"ms");
            renderResult(response, res);
        }catch(Exception ex){
            ex.printStackTrace();
        }
    }

如有不对的地方,欢迎指点

使用JAVA文件上传的几种方式,java基础面试问题大全及答案大全 在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!大家看完有什么不懂的可以在下方留言讨论也可以关注。在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例[外链图片转存中…(img-AzVnoXXL-1711169855360)] 阅读详情

相关推荐

文件上传的三种方式-Java

2项目为实现文件上传的三种方式的源码,详细说明见我的博客。 jsp_upload-servlet项目:(1).Jsp/servlet 实现文件上传 (2).模拟Post请求/servlet 实现文件上传 jetty_upload-springmvc项目:(3).模拟Post请求/Controller(SpringMvc)实现文件上传 请尊重原著,请勿随意传播。

Java 文件上传 三种方式

一:配置springBoot上传文件限制 spring: servlet: multipart: max-file-size: 100MB #单个文件大小 max-request-size: 1024MB #总文件大小 二:代码 import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.spri

qq_50990903的博客 2万+

Java 中HttpURLConnection附件上传的实例详解

主要介绍了Java 中HttpURLConnection附件上传的实例详解的相关资料,希望通过本文大家能掌握这样的知识内容,需要的朋友可以参考下

Java文件上传【通用】

Java文件上传 主要是针对于网页来说,一般是通过input的file类型上传文件流到后台,再通过后台处理将文件移动到指定位置达到上传的目的。 这里贴代码时,主要是以springboot框架为例,但是是通用的。 1、表单提交上传 <form enctype="multipart/form-data" method="post" action="/upload"> 文件:<input type="file" name="fileUpload"/> <input t

21届Java攻城狮&Python民兵 2万+

Yolov5s可视化网络结构图

Yolov5共有四种网络结构,每种网络深度和宽度上都不相同。 (1) Yolov5s可视化网络结构图:点击查看 (2) Yolov5m可视化网络结构图:点击查看 (3) Yolov5l可视化网络结构图:点击查看 (4) Yolov5x可视化网络结构图:点击查看 ...

江南研习社 15万+

IEC103协议实战指南:报文解析与传输优化策略

本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。

r2s3t4的博客 541

使用JAVA文件上传的几种方式,2面技术+HR面+offer

又是一年求职季,在这里,我为各位准备了一套Java程序员精选高频面试笔试真题,来帮助大家攻下BAT的offer,题目范围从初级的Java基础到高级的分布式架构等等一系列的面试题和答案,用于给大家作为参考以下是部分内容截图网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)一个人可以走的很快,但一群人才能走的更远!

2401_84439805的博客 858

电容式麦克风:从原理到实际电路波形解析

本文深入解析电容式麦克风的工作原理,从核心的振膜与背板结构、电荷锁定机制到场效应管放大器的作用。通过实物拆解与等效电路分析,阐明声音振动如何转换为电压信号,并指导如何用示波器实测波形,直观展现声电转换过程,适合电子爱好者和音频技术学习者。

Black的专栏 1080

2024年最全使用JAVA文件上传的几种方式,java异常面试题

/获取文件的后缀名。dir.exists() && dir.isDirectory()) {//判断文件目录是否存在。

2401_84585339的博客 536

UG/NX二次开发Siemens官方NXOPEN实例解析—1.3 BlockStyler/ExtrudewithPreview

随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。

MarcoPro的博客 1633

安卓应用锁开发实战:如何通过拦截Activity启动实现密码验证(附完整代码)

本文深入探讨了在安卓系统中开发应用锁功能的两种实战方案:通过修改ActivityStarter源码或实现IActivityController接口来拦截Activity启动流程,从而实现启动前的密码验证。文章详细对比了两种方案的技术选型、实现细节与适用场景,并提供了处理隐式Intent、验证状态管理等核心问题的完整代码,为开发系统级安全功能提供了实用指南。

tcp8optimizer的博客 457

【心得】Flex中的文件上传与下载

    和传统的JSP一样,在flex中,有的时候也需要实现文件上传和下载的功能,但是在flex里文件的上传和下载的实现相对来说比较复杂,如何实现,请看下面。     由于flex是一个比较新的技术,在研究的时候,还是按着JSP的方式去尝试,在开始之初,主要有以下几种思路:     A、利用ftp的方式进行文件的上传和下载,需要利用flex的socket接口。     B、利用webService...

JAVA & FLEX 332

yolov8x-p2 实现 tensorrt 推理

yolov8x-p2, tensorrt 实现.

J。 2273

java上传文件常见几种方式

1、ServletFileUpload   表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成httpservletRequest对象   ,在由相应的servlet进行处理。 package com.jws.app.operater.service.impl; ...

weixin_30872157的博客 7万+

基于STM32L4XX、HAL库的MAX13487EESA RS485总线收发器驱动程序设计

MAX13487EESA是一款3.3V供电的RS-485/RS-422收发器,由Maxim Integrated生产。PA4 (控制引脚) ---> /RE, DE (连接在一起)具有±15kV ESD保护的驱动器输出和接收器输入。半双工RS-485/RS-422通信。工业温度范围:-40°C至+85°C。工作电压范围:3.0V至3.6V。数据速率高达250kbps。

zhusl6688的博客 687

6、基于深度强化学习的无人机路径规划

本文介绍了一种结合人工势场法的改进DQN深度强化学习算法在无人机路径规划中的应用。通过设计合理的网络结构、状态空间、动作空间和融合引力-斥力机制的奖励函数,实现了无人机在复杂环境中的自主避障与目标导向飞行。采用轻量级神经网络提升实时性,并在Gazebo仿真环境中进行训练与测试,结果表明该算法具有快速收敛、高成功率和良好适应性。实验评估指标包括损失函数、最大Q值和任务成功率,验证了方法的有效性。文章还探讨了其在物流配送、农业植保和环境监测等领域的应用前景,并展望了多无人机协同与复杂环境适应性等未来研究方向。

html8的博客 241

java调用http接口的几种方式总结

本文参考:https://blog.youkuaiyun.com/fightingXia/article/details/71775516      https://www.cnblogs.com/jeffen/p/6937788.html 随着网络上java应用越来越多,场景越来越复杂,所以应用之间经常通过HTTP接口来访问资源 首先了解了URL的最常用的两种请求方式:第一种GET,第二种POST GET:get请求可以获取页面,也可以把参数放到URL后面以?分割传递数据,参数之间以&关联,.

xyl的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

spring文件上传的几种方式

文件上传 传统方式 借助第三方组件实现文件上传: UserController.java编写: 文件上传 传统方式 前端表单index.jsp代码: <%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%> Insert title here 文件上传 传统方...

伊甸园的博客 2036

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

总结SpringBoot文件上传的几种方式

应用开发过程中,文件上传是一个基础的扩展功能,本文梳理一下在SpringBoot当中文件上传所涉及的技术及实现,内容主要包括两部分,上传到服务器本地,以前的文章已经写得比较详细了,包括了单文件、多文件的上传,可以跳转至了解,另一部分是使用对象存储服务(比如阿里OSSMinIO等)来存储上传的文件,也是比较主流的一种方式,本站就是使用了腾讯云的对象存储服务搭建的静态网站,还有现在完成的一个外卖平台项目,其中菜品的图片资源就存储在阿里OSS。

weixin_46302607的博客 4949

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

三种方式上传文件-Java

前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光。并 Http 更多晦涩协议。因此,这种渐进的方式来学习和实践上载文件的原则。 该博客侧重于实践。 一.Http协议原理简单介绍 HTTP是一个属于应用层的面向对象的协议。因为其简捷、高速的方式,适用于分布式超媒体信息...

weixin_34109408的博客 197

java文件上传的几种实现方式

使用MultipartFile进行文件上传 MultipartFile的常用方法 //获取原始文件名 String OriginalFileName = multipartFile.getOriginalFilename(); //获取文件内容类型可以根据 类型和文件名 进行上传类型控制 String contentType = multipartFile.getContentType(); //获取文件大小可以对上传文件大小进行限制 Long fileSize = multipartFile.getSi.

dseggcd的博客 2102

使用 curl 发送 POST 请求的几种方式及重点讲解curl文件上传的后端代码实现案例

一、使用 curl 发送 POST 请求的几种方式 HTTP 的 POST 请求通常是用于提交数据,可以通过这篇文章来了解各种提交方式:四种常见的 POST 提交数据方式。做 Web 后端开发时,不可避免地要自己给自己发请求来调试接口,这里要记录的内容是如何使用命令行工具curl来进行各种方式的 POST 请求。 application/x-www-form-urlencoded 最常见的一种 POST 请求,用 curl 发起这种请求也很简单。 1 $ cu..

lhs_csdn的博客 1万+

java中文件上传的方式

实现方式依赖适用场景优点Servlet 3.0 原生无(Servlet 3.0+)传统 Java Web 项目无第三方依赖,轻量Spring MVC 项目封装完善,兼容性好Spring Boot 自动配置Spring Boot 项目零配置,开发效率高Commons FileUpload 原生非 Spring 项目灵活可控,底层可定制。

hyh1795844373的博客 1308

java文件上传有几种_java上传文件常见几种方式

1、ServletFileUpload表单提交中当提交数据类型是multipare/form-data类型的时候,如果我们用servlet去做处理的话,该http请求就会被servlet容器,包装成httpservletRequest对象,在由相应的servlet进行处理。packagecom.jws.app.operater.service.impl;importjava.io.File;imp...

weixin_39692172的博客 619

Java文件上传的机制与原理以及几种协议方式

 Java文件上传的机制与原理以及几种协议方式

Micky blog 865
上一篇: 网站的防攻击逻辑代码
下一篇: 通过poi,jar包制作模板动态的生成word文档。支持转换成pdf格式文档
languageStudents
博客等级 码龄6年 492粉丝 127原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

languageStudents

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值