废话不多说,直接上代码:

1:pom中添加一下依赖:

        <!--druid数据源--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.21</version></dependency><!--hutool-all --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.5</version></dependency><!--http components--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId></dependency><!--http--><dependency><groupId>commons-httpclient</groupId><artifactId>commons-httpclient</artifactId><version>3.1</version></dependency><!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version></dependency><!-- https://mvnrepository.com/artifact/commons-io/commons-io --><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version></dependency>

2:controller层:上传成功返回服务器路径

package com.axin229913.upload.Controller;import com.alibaba.druid.util.StringUtils;
import com.axin229913.upload.Commen.Commen;
import com.axin229913.upload.Request.FileUploadRequest;
import com.axin229913.upload.Util.FileUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** 类名:上传文件接口** @author a-xin* @date 2022/8/25*/
@Slf4j
@RestController
@RequestMapping("/file")
@CrossOrigin
@Api(tags = "上传文件接口")
public class UploadController extends Commen {@Value("${base.upload.url}")private String baseUploadUrl;@Value("${bucket.name}")private String bucketName;@PostMapping(value = "/load", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)@ApiOperation(value = "文件上传接口")public String fileLoad(FileUploadRequest request) {log.info("fileLoad_" + request);String videoMinioUrl;videoMinioUrl = FileUtil.uploadFile(baseUploadUrl, request.getFile(), bucketName);errIf(StringUtils.isEmpty(videoMinioUrl), "上传异常!");return videoMinioUrl;}}

2:util层:

package com.axin229913.upload.Util;import com.alibaba.fastjson.JSONObject;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;/*** 类名:文件工具类** @author a-xin* @date 2022/8/25*/
public class FileUtil {/*** 通过文件流形式上传文件到服务器** @param url* @param file* @param bucketNames* @return String fileUrl*/public static String uploadFile(String url, MultipartFile file, String bucketNames) {CloseableHttpClient httpClient = HttpClients.createDefault();HttpPost uploadFile = new HttpPost(url);MultipartEntityBuilder builder = MultipartEntityBuilder.create();builder.addTextBody("bucketName", bucketNames, ContentType.TEXT_PLAIN);builder.addTextBody("productId", "1", ContentType.TEXT_PLAIN);// 把文件加到HTTP的post请求中try {builder.addBinaryBody("file",file.getInputStream(),ContentType.APPLICATION_OCTET_STREAM,file.getOriginalFilename());HttpEntity multipart = builder.build();uploadFile.setEntity(multipart);CloseableHttpResponse response = httpClient.execute(uploadFile);HttpEntity responseEntity = response.getEntity();String sResponse = EntityUtils.toString(responseEntity, "UTF-8");JSONObject jsonObject = JSONObject.parseObject(sResponse);Object data = jsonObject.get("data");return data.toString();} catch (IOException e) {throw new RuntimeException("上传文件异常,请重试");}}/*** 通过文件ID下载文件,返回文件流形式** @param fileUrl* @param response* @return String*/public static String downloadFile(String fileUrl, HttpServletResponse response) {try {//获取文件名String temp[] = fileUrl.split("\\\\");String fileName = temp[temp.length - 1];// 设置编码response.setCharacterEncoding("UTF-8");response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));//与服务器建立连接获取输入流URLConnection conn = new URL(fileUrl).openConnection();InputStream inputStream = conn.getInputStream();//获取响应流ServletOutputStream out = response.getOutputStream();// 读取文件流int len = 0;byte[] buffer = new byte[1024 * 10];while ((len = inputStream.read(buffer)) != -1) {//写出到http响应体输出out.write(buffer, 0, len);}out.flush();} catch (Exception e) {throw new RuntimeException("下载异常,请重试");}return null;}//获取文件后缀名public static String getSuffix(final MultipartFile file) {if (file == null || file.getSize() == 0) {return null;}String fileName = file.getOriginalFilename();return fileName.substring(fileName.lastIndexOf(".") + 1);}//转换成文件类型为FileItempublic static FileItem createFileItem(String filePath) {FileItemFactory factory = new DiskFileItemFactory(16, null);String textFieldName = "textField";int num = filePath.lastIndexOf(".");String extFile = filePath.substring(num);FileItem item = factory.createItem(textFieldName, "text/plain", true,"MyFileName" + extFile);File newfile = new File(filePath);long fileSize = newfile.length();int bytesRead = 0;byte[] buffer = new byte[(int) fileSize];try {FileInputStream fis = new FileInputStream(newfile);OutputStream os = item.getOutputStream();while ((bytesRead = fis.read(buffer, 0, buffer.length)) != -1) {os.write(buffer, 0, bytesRead);}os.close();fis.close();} catch (IOException e) {e.printStackTrace();}return item;}}

3:yml文件配置路径:

#上传服务器路径
base:upload:url: http://124.0.0.1:8080/file/upload
bucket:name: a-xin

4:commen类:

package com.axin229913.upload.Commen;/*** 类名:共同继承类** @author a-xin* @date 2022/8/26*/
public abstract class Commen {/*** 抛出异常信息** @param check* @param message*/protected void errIf(Boolean check, String message) {if (check) {throw new RuntimeException(message);}}/*** 抛出异常** @param message*/protected void errIf(String message) {throw new RuntimeException(message);}/*** 生成随机ID** @return ID*/protected static String nextId() {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append(621558);stringBuilder.append(System.currentTimeMillis());return stringBuilder.toString();}}

代码完毕,如有疑问,请私信我哦~~~

大佬们请点喷

Java获取流形式上传下载文件相关推荐

  1. Java通过FTP服务器上传下载文件的方法

    本文介绍了如何使用Apache Jakarta Commons Net(commons-net-3.3.jar)基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作 ...

  2. Java实现七牛云上传下载文件或图片

    文章目录 写在前面 一.准备工作 1.1.为什么选择七牛云? 1.2.七牛云注册 二.java操作七牛云对象存储下载 2.1.pom.xml引入依赖 2.2.上传下载具体代码 三.具体业务例子(七牛云 ...

  3. java 百度网盘上传_使用pcs api往免费的百度网盘上传下载文件的方法

    百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的. 环境准备: 开通读写网盘的权限及获取access_token:http://blog ...

  4. java 上传文件及预览_SpringBoot上传下载文件及在线预览

    SpringBoot上传下载文件及在线预览 今天大概就说说如何使用SpringBoot进行上传和下载以及在线预览文件 本篇主要介绍上传下载的功能,对于界面就简单一点,大致如下: 一.老规矩还是先看看小 ...

  5. java 文件上传到ftp_JAVA技术实现上传下载文件到FTP服务器(完整)

    具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于 ...

  6. java文件客户端下载_使用Java写一个minio的客户端上传下载文件

    标签:color   ati   tty   java   system   wired   format   media   param 前言: 确保已经安装了minio的服务端 代码: pom.x ...

  7. java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...

  8. ftp上传下载文件详解

    首先导入包 import org.apache.commons.NET.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; FTPCli ...

  9. JavaWeb:上传下载文件

    1. 文件上传概述 1.1 文件上传的作用 例如网络硬盘!就是用来上传下载文件的. 在智联招聘上填写一个完整的简历还需要上传照片呢. 1.2 文件上传对页面的要求 上传文件的要求比较多,需要记一下: ...

最新文章

  1. 2017寒假练习题解 第四周 2.6-2.12
  2. windows10下Anaconda spyder安装CRF++的python接口
  3. 怎么取消html的原始属性,回归原始,尽量使用XHTML标签默认属性
  4. window使用技巧记录
  5. 华为8545m5补全shell_华为hs8145v5 改华为界面和默认超密(一)
  6. 程序员面试技巧:一起去面试,公司用他而不用你,注意这三个点
  7. 服务器2003光盘修复,windows光盘修复系统
  8. ftp ---- 本地用户登录(实例配置1:)
  9. hdu 1045 Fire Net
  10. 小明利用计算机软件绘制函数,辽宁省大连市2014年高二学业水平模拟考试 信息技术试题(三)...
  11. Wpf之无法添加wpf窗体
  12. 基础之 window-self-top-opener
  13. DevOps使用教程 华为云(6)文档报告 项目进度 会议记录 迭代评审
  14. matlab执行m文件语句,matlab 编写m文件函数
  15. 尚硅谷 模拟w3school首页导航条练习
  16. [MUI框架]-滑动侧边栏-div同页结构
  17. php 主机管理系统,LuManager虚拟主机管理系统
  18. JavaScript(6):回调函数
  19. 使用Intellij Idea 创建一个JDBC连接sqlserver数据库的程序步骤
  20. 解决HTTP GET方法调用带有body问题

热门文章

  1. 死磕算法第二弹——栈、队列、链表(1)
  2. excel弹窗:“固定对象被移动”怎么解决?----一般是筛选操作导致的问题,莫名奇怪的解决了。。。
  3. webpack打包优化(polyfill/HappyPack/dllPlugin)
  4. 网站抓取获取手机号码原理解析
  5. Java的web项目练习,展示数据库中所有联系人的信息,并实现添加,删除和修改功能
  6. 从长沙到南京,看“ACE交通引擎”落地实践的进程
  7. Python编程题(1)——淘淘摘苹果
  8. ArgumentOutOfRangeException: 指定的参数已超出有效值的范围。 参数名: site
  9. Android11去掉平板电脑正常启动中弹框
  10. Socket5实现内网代理