文件上传就是通过io流复制到浏览器的过程

快速实现文件上传功能

1.后台实现文件上传功能  定义controllere

@RequestMapping("/upload/file")@ResponseBodypublic String uploadImg(@RequestParam("file") MultipartFile multipartFile){if (multipartFile.isEmpty()){return "文件有误";}long size = multipartFile.getSize();  //文件大小String originalFilename = multipartFile.getOriginalFilename();  //文件名字String contentType = multipartFile.getContentType(); //文件类型return uploadService.uploadFile(multipartFile);}

定义serevice

    @Value("${file.uploadFolder}")private String uploadFolder;  //具体位置@Value("${file.staticPath}")private String staticPath;  //http://localhpst:8080/***MultipartFile 这个对象是springmvc提供的文件上传的接受的类* 他的底层自动会和HttpServletRequest request 中的request.getInputStream融合* 从而达到文件上传的效果,也就是告诉我们一个道理* 文件上传的底层原理request.getInputStream* @param multipartFile* @return*/public String uploadFile(MultipartFile multipartFile){try {//文件名字String filename = multipartFile.getOriginalFilename();//文件后缀String suffix = filename.substring(filename.lastIndexOf("."));// 生成的唯一的文件名:能不能用中文名:不能因为统一用英文命名。String newFileName = UUID.randomUUID().toString() + suffix;//日期目录SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");String format = dateFormat.format(new Date());//2021/11/03//指定文件上传的目录String targetPath = uploadFolder + format;File file = new File(targetPath);// 如果目录不存在 递归创建if (!file.exists())file.mkdirs();//指定文件上传以后的服务器的完整的文件名File targetFileName = new File(targetPath,newFileName);//文件上传到指定的目录multipartFile.transferTo(targetFileName);//可访问的路径要返回页面// http://localhpst:8080/2021/10/27/5f61dea2-4b77-4068-8d0b-fdf415eac6df.png//文件所在的目录和文件名(生成的)String filename1 = format +"/"+ newFileName;return staticPath+filename1;} catch (IOException e) {e.printStackTrace();return "faile";}}

文件上传不会直接上传真是的目录,它一定要经过一个临时目录的中转以后,才会上传到真是目录。作用:

  • 防止上传出现网络断开,或者用户上传直接刷新或者取消。因为如果用户的网络断开或者取消,就造成大量的垃圾文件

  • 保证真实目录上传的文件一定是有效的。

配置文件上传大小

spring:servlet:multipart:# 是单个文件大小 默认1M 10KBmax-file-size: 20MB# 是设置总上传的数据大小max-request-size: 100MB#当文件达到多少时进行磁盘写入file-size-threshold: 20MB#临时目录location: D://test  

或者这样配置

    @Bean  public MultipartConfigElement multipartConfigElement() {  MultipartConfigFactory factory = new MultipartConfigFactory();  //文件最大  factory.setMaxFileSize("10240KB"); //KB,MB  /// 设置总上传数据总大小  factory.setMaxRequestSize("102400KB");  return factory.createMultipartConfig();  }  

这样就达到了文件上传的功能

2.通过http请求服务资源

springboot有一个目录:static这个目录其实就是静态资源目录,这个目录下面的文件是可以通过http直接问题的。但是程序话一般打成jar包,我们没办法去文件写入到这个static下,还有就是上传文件要访问的话,打成jar包也不能直接访问,所以springboot提供静态资源目录的额外的映射机制,就是静态资源服务映射。它就类似于:nginx的静态资源映射。


@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {@Value("${file.staticPatternPath}")private String staticPatternPath;@Value("${file.uploadFolder}")private String uploadFolder;// 这个就是springboot中springMvc让程序开发者去配置文件上传的额外的静态资源服务的配置@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {//registry.addResourceHandler("访问的路径").addResourceLocations("上传资源的路径");//注意: uploadFolder 后面一定跟/ 如 E:/test/  如果E:/test 就会出现404registry.addResourceHandler(staticPatternPath).addResourceLocations("file:"+uploadFolder);}}

配置文件

file:uploadFolder: E:/test/staticPath: http://localhost:8080/staticPatternPath: /uploadFile/**

3.阿里云简单上传

官方文档 前言 (aliyun.com)https://help.aliyun.com/document_detail/32008.html?spm=5176.87240.400427.45.4c884614EG2PmS endpoint,accessKeyId,accessKeySecret,bucketName是oss自带参数,登陆oss查看

service层

    public String oosUploadFile(MultipartFile multipartFile) {String bucketName = null;String endpoint = null;String fileUrl = null;try {//Bucket名称。bucketName = "xxx";// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填  写为https://oss-cn-hangzhou.aliyuncs.com。endpoint = "oss-cn-beijing.aliyuncs.com";// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户 进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "XXX";String accessKeySecret = "XXXX";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);InputStream inputStream = multipartFile.getInputStream();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");String format = simpleDateFormat.format(new Date());String originalFilename = multipartFile.getOriginalFilename();String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));String fileName = UUID.randomUUID().toString();String newName = fileName + suffix;fileUrl = format + "/" + newName;// 创建PutObjectRequest对象。// 依次填写Bucket名称(例如examplebucket)、Object完整路径(例如exampledir/exampleobject.txt)和本地文件的完整路径。Object完整路径中不能包含Bucket名称。// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileUrl, inputStream);// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。// ObjectMetadata metadata = new ObjectMetadata();// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());// metadata.setObjectAcl(CannedAccessControlList.Private);// putObjectRequest.setMetadata(metadata);// 上传文件。ossClient.putObject(putObjectRequest);// 关闭OSSClient。ossClient.shutdown();} catch (IOException e) {e.printStackTrace();}//https://upload-liang.oss-cn-beijing.aliyuncs.com/2021/11/04/129904d9-d959-44e1-bcaa-5f7a0b663287.txreturn "https://" + bucketName + "." + endpoint + "/" + fileUrl;}

4.阿里云简单下载到浏览器

controller层

    @RequestMapping("/download")@ResponseBodypublic void download(HttpServletResponse response){String filePath = "2021/11/04/129904d9-d959-44e1-bcaa-5f7a0b663287.txt";uploadService.download(response,filePath);//uploadService.downFile(response);}

 service层

public void download( HttpServletResponse response,String filePath){String filename = filePath.substring(filePath.lastIndexOf("/")).replace("/", "");//String filename = "129904d9-d959-44e1-bcaa-5f7a0b663287.txt";String endpoint = "oss-cn-beijing.aliyuncs.com";// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "xxxx";String accessKeySecret = "xxxx";// 填写Bucket名称。String bucketName =  "upload-liang";BufferedInputStream bufferedInputStream = null;OutputStream  outputStream  = null;try {response.reset();response.setCharacterEncoding("utf-8");response.setContentType("application/x-msdownload");response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("UTF-8"), "iso8859-1"));// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);//public OSSObject getObject(String bucketName, String key) throws OSSException, ClientException;// key值为 不包含Bucket名称在内的Object完整路径,例如2021/11/04/129904d9-d959-44e1-bcaa-5f7a0b663287.txt。OSSObject object = ossClient.getObject(bucketName, filePath);bufferedInputStream = new BufferedInputStream(object.getObjectContent());outputStream = response.getOutputStream();byte[] bytes = new byte[1024];int len = 0;while (((len=bufferedInputStream.read(bytes))!=-1)){outputStream.write(bytes,0,len);}outputStream.flush();ossClient.shutdown();} catch (IOException e) {e.printStackTrace();}finally {try {if (outputStream != null) {outputStream.close();}if (bufferedInputStream != null) {bufferedInputStream.close();}} catch (IOException e) {e.printStackTrace();}}}

4.阿里云简单下载到本地

 public void downLoad(){// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。String endpoint = "oss-cn-beijing.aliyuncs.com";// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "xxxx";String accessKeySecret = "xxxx";// 填写Bucket名称。String bucketName =  "upload-liang";// 填写不包含Bucket名称在内的Object完整路径,例如testfolder/exampleobject.txt。String objectName = "2021/11/04/129904d9-d959-44e1-bcaa-5f7a0b663287.txt";// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);// 下载Object到本地文件,并保存到指定的本地路径中。如果指定的本地文件存在会覆盖,不存在则新建。// 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File("D:\\test\\examplefile.txt"));// 关闭OSSClient。ossClient.shutdown();}

文件上传及oss简单上传及下载相关推荐

  1. OSS简单上传下载整理

    更新:OSS在私有云环境文件上传失败 代码在私有云执行时,总是出现以下错误 [ErrorCode]: NoSuchBucket [RequestId]: 00000000000000000000000 ...

  2. vue+el-upload组件封装(图片,文件上传至oss阿里云)

    1.安装ali-oss npm install ali-oss --save 2.oss方法封装 新建utils/ali-oss-upload.js文件(代码如下) const OSS = requi ...

  3. 阿里云oss文件上传(简单上传、服务端签名后直传)

    前置: 自行开通阿里oss服务: https://www.aliyun.com/product/oss?spm=a2c4g.11174283.J_8058803260.125.d9387da2TjNf ...

  4. ideaspringboot项目上传服务器_nuxt+pm2 自动化部署及打包后文件自动上传阿里云 oss

    在读这篇文档时,希望你对 nuxt 及 pm2,有简单的了解 nuxt pm2 前期准备 安装 pm2 及构建 nuxt $ npm i pm2 -g $ npx create-nuxt-app &l ...

  5. 阿里云OSS域名配置及简单上传

    目前开发系统,附件文件一般都会使用第三方的存储空间来保存,一方面是为了开发者提供便利,另一方可以减轻系统的访问压力,下面介绍一下阿里云的OSS的一些简单配置和使用. 一.阿里云OSS配置 前提:你需要 ...

  6. java上传文件至阿里云oss工具类

    第一步:引入oss maven坐标 <dependency><groupId>com.aliyun.oss</groupId><artifactId>a ...

  7. go walk 开发window界面,上传文件到阿里云oss -- 服务器端

    前面我们完成了一个网页端的上传oss程序:https://blog.csdn.net/daily886/article/details/103366145 现在我们把前后端分离 前端使用walk开发, ...

  8. 阿里云oss简单的上传下载删除(java)

    阿里云oss上传和下载. 配置maven <!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss --> ...

  9. 微信小程序 - 超详细 “纯前端“ 将文件上传到阿里云 OSS,最新阿里云 OSS 直传音视频、图片、word、excel、ppt、office 文档(全程无需后端,前端文件直传阿里云oss服务器)

    前言 网上的教程乱七八糟却文件少代码(并且没注释),而且都已经很老了,对于新手来说真的无从下手. 本文站在新手小白的角度,实现微信小程序开发中,"前端直传" 上传文件到阿里云oss ...

最新文章

  1. python错误代码40035_Python 创建XML
  2. c语言编写程序x的y次方,C语言变为编程y = x-x立方/ 3! + x五次方力量/ 5! -x7th power / 7!...
  3. python语言支持哪些类型的运算符_Python运算符有哪些类型?Python学习
  4. iview tag 标签点击事件
  5. 程序员终结者还是“白嫖”开源代码?GitHub推出的AI编程辅助工具陷入争议
  6. Struts2数据封装
  7. H - 数据结构实验之链表九:双向链表
  8. 简单设计企业级JOB平台
  9. opensips服务端搭建
  10. 0x0000006B蓝屏问题解决方法
  11. Raid5数据恢复原理以及raid5数据恢复成功案例
  12. 浅谈交互设计师的未来
  13. NodeBB实现登录企业账号系统(简单实现,非CAS登录)
  14. 你有用过Type-C接口的手电筒吗?
  15. 青岛方言发音对照表(内附英文释义)
  16. 重新试用了office与wps.感觉这次wps好多了.
  17. CSS的px和em的区别
  18. 中标麒麟学习笔记0:安装极点五笔输入法
  19. 如何优雅地弄好PCB丝印
  20. 计算机毕业设计SSM高铁在线购票系统【附源码数据库】

热门文章

  1. Web方向学习路线(信息安全)
  2. 0基础学习VR全景平台篇第33章:场景功能-嵌入标尺
  3. DAY 8 | 自学前端第八天
  4. js微信公众号文章链接正则校验
  5. 网络流——最大流(全)
  6. 把多余的内存空间虚拟成硬盘空间,享受飞一般的感觉!
  7. C语言 计算猴子摘桃数目(多种方法)
  8. vivado工程版本升级时相关IP版本IP Status显示Using cached IP results
  9. MySQL函数及提权
  10. 天虹 项目支付宝开发