阿里云 oss服务器文件上传 java

阿里云oss上传----sts临时授权上传 阿里云上传oss# oss上传 在我们的项目实战开发中经常会用到文件的上传和下载,但是存放到我们自己的服务器上又会很占空间,而且访问可能也会收到限制,所以说使用其他远程服务存储文件是一个很有必要的选择,我们项目因为买了阿里云的服务,所以文件的上传和下载就使用了阿里云的。 文件上传时,阿里云提供了java上传,web直传等方式,我们为了省后端到前端访问的流量,就直接使用web前端直传,为了安全后端提供前端一个安全的token以及需要的密钥等等。 1.先配置好我们公司的密钥和ID以及阿里云公用的服务等, 使用的 阅读详情

前天做oss服务器文件上传,之前没了解过,做的过程中遇到许多问题,最终通过查阅相关资料解决了,特分享一下。

首先准备工作 必要的jar 


这里注意版本一致,不然就会报很多坑爹的错误。。

如果你断点调试在执行putObject方法时报错,99%的是jar包有问题。。

然后是配置文件


现在开通oss,都是免费开通的,包年9块钱。

这是几个必要的参数,既然做这个肯定 要知道的!这里就不多做解释了。

这里,首先需要我们创建一个OSS信息实体类,OSSConfigure.Java,用来读取配置文件的信息,封装成实体。

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;  
  /**
   * oss相关参数实体
   * @author liux
   *2017/5/5
   */
public class OSSConfigure {  
  
    private String endpoint;  
    private String accessKeyId;  
    private String accessKeySecret;  
    private String bucketName;  
    private String accessUrl;  
  
    public OSSConfigure() {  
  
    }  
  
    /** 
     * 通过配置文件.properties文件获取,这几项内容。 
     *  
     * @param storageConfName 
     * @throws IOException 
     */  
    public OSSConfigure(String storageConfName) throws IOException {  
  
        Properties prop = new Properties(); 
        InputStream is= super.getClass().getClassLoader().getResourceAsStream(storageConfName);
        prop.load(is);  
  
        endpoint = prop.getProperty("Endpoint").trim();  
        accessKeyId = prop.getProperty("AccessKey").trim();  
        accessKeySecret = prop.getProperty("AccessKeySecret").trim();  
        bucketName = prop.getProperty("BucketName").trim();  
        accessUrl = prop.getProperty("accessUrl").trim();  
  
    }  
  
    public OSSConfigure(String endpoint, String accessKeyId,  
            String accessKeySecret, String bucketName, String accessUrl) {  
  
        this.endpoint = endpoint;  
        this.accessKeyId = accessKeyId;  
        this.accessKeySecret = accessKeySecret;  
        this.bucketName = bucketName;  
        this.accessUrl = accessUrl;  
    }  
  
    public String getEndpoint() {  
        return endpoint;  
    }  
  
    public void setEndpoint(String endpoint) {  
        this.endpoint = endpoint;  
    }  
  
    public String getAccessKeyId() {  
        return accessKeyId;  
    }  
  
    public void setAccessKeyId(String accessKeyId) {  
        this.accessKeyId = accessKeyId;  
    }  
  
    public String getAccessKeySecret() {  
        return accessKeySecret;  
    }  
  
    public void setAccessKeySecret(String accessKeySecret) {  
        this.accessKeySecret = accessKeySecret;  
    }  
  
    public String getBucketName() {  
        return bucketName;  
    }  
  
    public void setBucketName(String bucketName) {  
        this.bucketName = bucketName;  
    }  
  
    public String getAccessUrl() {  
        return accessUrl;  
    }  
  
    public void setAccessUrl(String accessUrl) {  
        this.accessUrl = accessUrl;  
    }  
  
}  


然后就是创建一个OSS文件管理的OSSManageUtil工具类。oss文件存储实际上就是对Object的操作,只要写好路径,都会自动创建的,OSSClient是oss的核心,有兴趣的可以多研究下。我做这个 是要上传app,以及压缩图片后上传,contentType这个方法注意,我上传的是apk  所以要用这个类型application/octet-stream,之前因为这个找了半天错。

package com.cdy.utils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;


import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;

/**
 * 对OSS服务器进行上传删除等的处理
 * 
 * @ClassName: OSSManageUtil
 * @Description:
 * @author liux
 * @date 2017-5-3 上午10:47:00
 * 
 */
public class OSSManageUtil {
	/**
	 * 上传OSS服务器文件 @Title: uploadFile 
	 *  @param multipartFile spring 上传的文件
	 * remotePath @param oss服务器二级目录
	 *  @throws Exception 设定文件 @return String
	 * 返回类型 @throws
	 */
	public static String uploadFile(InputStream fileContent, String remotePath,String fileName) throws Exception {
		//随机名处理
		fileName = "lxkc_" + new Date().getTime() + fileName.substring(fileName.lastIndexOf("."));
		// 加载配置文件,初始化OSSClient
		OSSConfigure ossConfigure = new OSSConfigure("/system.properties");
		OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(),
				ossConfigure.getAccessKeySecret());
		// 定义二级目录
		String remoteFilePath = remotePath.substring(0, remotePath.length()).replaceAll("\\\\", "/") + "/";
		// 创建上传Object的Metadata
		ObjectMetadata objectMetadata = new ObjectMetadata();
		objectMetadata.setContentLength(fileContent.available());
		objectMetadata.setContentEncoding("utf-8");
		objectMetadata.setCacheControl("no-cache");
		objectMetadata.setHeader("Pragma", "no-cache");
		objectMetadata.setContentType(contentType(fileName.substring(fileName.lastIndexOf("."))));
		objectMetadata.setContentDisposition("inline;filename=" + fileName);
		// 上传文件
		ossClient.putObject(ossConfigure.getBucketName(), remoteFilePath + fileName, fileContent, objectMetadata);
		// 关闭OSSClient
		ossClient.shutdown();
		// 关闭io流
		fileContent.close();
		return ossConfigure.getAccessUrl() + "/" + remoteFilePath + fileName;
	}

	// 下载文件
	@SuppressWarnings("unused")
	public static void downloadFile(OSSConfigure ossConfigure, String key, String filename)
			throws OSSException, ClientException, IOException {
		// 初始化OSSClient
		OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(),
				ossConfigure.getAccessKeySecret());
		OSSObject object = ossClient.getObject(ossConfigure.getBucketName(), key);
		// 获取ObjectMeta
		ObjectMetadata meta = object.getObjectMetadata();

		// 获取Object的输入流
		InputStream objectContent = object.getObjectContent();

		ObjectMetadata objectData = ossClient.getObject(new GetObjectRequest(ossConfigure.getBucketName(), key),
				new File(filename));
		// 关闭数据流
		objectContent.close();

	}

	/**
	 * 根据key删除OSS服务器上的文件 @Title: deleteFile @Description: @param @param
	 * ossConfigure @param @param filePath 设定文件 @return void 返回类型 @throws
	 * @throws IOException 
	 */
	public static void deleteFile( String filePath) throws IOException {
		// 加载配置文件,初始化OSSClient
		OSSConfigure ossConfigure = new OSSConfigure("/system.properties");
		OSSClient ossClient = new OSSClient(ossConfigure.getEndpoint(), ossConfigure.getAccessKeyId(),
				ossConfigure.getAccessKeySecret());
		filePath=filePath.substring(45);
		ossClient.deleteObject(ossConfigure.getBucketName(), filePath);

	}

	/**
	 * Description: 判断OSS服务文件上传时文件的contentType @Version1.0
	 * 
	 * @param FilenameExtension
	 *            文件后缀
	 * @return String
	 */
	public static String contentType(String FilenameExtension) {
		if (FilenameExtension.equals(".BMP") || FilenameExtension.equals(".bmp")) {
			return "image/bmp";
		}
		if (FilenameExtension.equals(".GIF") || FilenameExtension.equals(".gif")) {
			return "image/gif";
		}
		if (FilenameExtension.equals(".JPEG") || FilenameExtension.equals(".jpeg") || FilenameExtension.equals(".JPG")
				|| FilenameExtension.equals(".jpg") || FilenameExtension.equals(".PNG")
				|| FilenameExtension.equals(".png")) {
			return "image/jpeg";
		}
		if (FilenameExtension.equals(".HTML") || FilenameExtension.equals(".html")) {
			return "text/html";
		}
		if (FilenameExtension.equals(".TXT") || FilenameExtension.equals(".txt")) {
			return "text/plain";
		}
		if (FilenameExtension.equals(".VSD") || FilenameExtension.equals(".vsd")) {
			return "application/vnd.visio";
		}
		if (FilenameExtension.equals(".PPTX") || FilenameExtension.equals(".pptx") || FilenameExtension.equals(".PPT")
				|| FilenameExtension.equals(".ppt")) {
			return "application/vnd.ms-powerpoint";
		}
		if (FilenameExtension.equals(".DOCX") || FilenameExtension.equals(".docx") || FilenameExtension.equals(".DOC")
				|| FilenameExtension.equals(".doc")) {
			return "application/msword";
		}
		if (FilenameExtension.equals(".XML") || FilenameExtension.equals(".xml")) {
			return "text/xml";
		}
		if (FilenameExtension.equals(".apk") || FilenameExtension.equals(".APK")) {
			return "application/octet-stream";
		}
		return "text/html";
	}
}

以上是主要代码,再贴一下我的controller,我这里是做的app文件上传


/**
	 * app文件上传
	 *
	 * @param imageFile
	 * @param request
	 * @return
	 */
	@RequestMapping(value = "/uploadApp", method = RequestMethod.POST)
	@ResponseBody
	public ImportResponse uploadApp(@RequestParam("app") MultipartFile appFile, VersionUpgrade versionUpgrade) {
		if (versionUpgrade == null) {
			return ImportResponse.fail("上传失败!");
		}
		try {
			 // 流转换 将MultipartFile转换为oss所需的InputStream
 			CommonsMultipartFile cf = (CommonsMultipartFile) appFile;
 			DiskFileItem fi = (DiskFileItem) cf.getFileItem();
 			InputStream fileContent = fi.getInputStream();
 			String fileName = fi.getName();
			String apkUrl = OSSManageUtil.uploadFile( fileContent, "xxapp",fileName);
			versionUpgrade.setApkUrl(apkUrl);
			versionUpgrade.setLoginUserVw(curUser);
			versionUpgradeManager.save(versionUpgrade);
		} catch (Exception e) {
			log.error("【app上传失败】 :", e);
			return ImportResponse.fail("上传失败!");
		}
		return ImportResponse.success("上传成功!");
	}

以上就是全部内容了,都是api里面有的,因为自己做的过程中出现很多问题,所以分享给大家!

基于Java的阿里云OSS上传实战教程 在当今数字化时代,对象存储服务(Object Storage Service, OSS)已经成为云计算与数据管理领域不可或缺的部分。OSS是一种面向非结构化数据的分布式存储解决方案,提供高可靠性、易扩展、低成本的存储服务。它广泛应用于图片存储、视频流媒体、大数据分析等多种场景,使得企业能够高效地管理和处理大量数据。OSS的设计理念是为了简化存储过程,将数据作为对象进行存储,每个对象都包含唯一的Key、元数据和数据体。用户可以通过简单的API接口上传、下载或管理这些对象。 阅读详情

相关推荐

【移动APP测试】Firebase Test Lab (FTL) 实战指南:从零搭建自动化测试流水线

本文详细介绍了Firebase Test Lab (FTL) 在移动APP测试中的实战应用,从零搭建自动化测试流水线。通过真实设备、虚拟设备和iOS设备的全面覆盖,FTL帮助开发者高效进行兼容性测试、性能监控和崩溃分析,显著提升应用质量。文章还提供了设备选择策略、成本控制技巧和CI/CD集成的最佳实践,助力团队优化测试流程。

weixin_29281915的博客 255

JAVA上传文件到阿里云OSS

文章目录1、创建Bucket2、获取AccessKey3、找开发文档4、后端集成OSS1、创建子模块service-oss并配置pom.xml2、配置application.properties3、启动项目4、从配置文件读取信息5、编写上传代码6、使用swagger测试接口7、上传成功后查看文件 1、创建Bucket 2、获取AccessKey 搜索框搜索accesskey 进到创建页面后点击人员管理-用户 3、找开发文档 0SS学习路径 4、后端集成OSS 1、创建子模块service-oss

qq_43555338的博客 1353

电源完整性之Cadence Sigrity Power DC_电热协同仿真

之前和大家分享过电源完整性之仿真设计原理链接: link.今天接着上一篇文章总结一下电源直流压降的的仿真操作流程及一些simulation中的设置参数,用到的是Cadence Sigrity 中的Power DC组件,来操作一下电热协同仿真,下面开始享受仿真的快乐吧: 第0步:仿真简介 电热协同仿真把电和热相互的影响考虑到了一起。因为电导率并不是固定不变的,而是和温度有关,随着温度的升高导电率会下降。同样电流流径电阻的时候会产生热量,此热量为焦耳热。因此为了获得准确的仿真信息,应考虑电与热的互相影响,进行电

刘小同学的博客 1万+

Java调用阿里云oss下载文件

参考:Java调用阿里云oss_haiyanghan的博客-优快云博客 阿里云官方指导:下载文件 - 对象存储 OSS - 阿里云 1、准备工作   具体细节参考Java调用阿里云oss_haiyanghan的博客-优快云博客。 2、项目需求   我这里只需要根据文件名称把文件从oss下载下来即可,参考阿里云官网指导:下载文件 - 对象存储 OSS - 阿里云   首先需要引入阿里云的依赖包,如下所示: 1 <!--阿里云oss --> 2 <dependency&gt

Biexiansheng的博客 4026

Python 使用Pygame库实现足球游戏:创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理

本文将介绍如何使用Python和Pygame库创建一个简单的足球游戏。我们将搭建一个基本的游戏环境,创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理。这个简单的足球游戏展示了Pygame的一些基本功能。虽然这是一个简单的游戏,但它包含了创建游戏循环、用户输入处理、物理模拟、碰撞检测等重要概念。

程序熊的博客 744

保姆级教程:用GD32F470的EXMC Bank0 Region0与FPGA实现16位并行通信(附完整代码)

本文详细介绍了如何利用GD32F470的EXMC Bank0 Region0与FPGA实现16位并行通信,涵盖硬件连接、寄存器配置、时序优化及FPGA接口设计等关键步骤。通过实例代码和调试技巧,帮助开发者快速掌握高效数据交互技术,提升嵌入式系统设计能力。

weixin_26918763的博客 226

OSS-图片上传

OSS上传图片的案例,Eclipse直接应用或者maven使用都可以,还可以封装为一个工具类调用,都十分方便的哦

困于混沌,亦造星河 3527

HFSS仿真平行线定向耦合器学习笔记

材料:FR4(玻璃纤维环氧树脂),介电常数:4.4,损耗角正切:0.02,厚度0.8mm。扫频方式:快速扫频,扫频范围:1.0GHz~3.0GHz,步进:0.01GHz。端口2是端口1关于Y轴对称,端口3,端口4是端口1和端口2关于X轴对称得到。求解中心频率:2.0GHz,迭代次数:20,收敛误差为0.02。右键设置边界条件----辐射边界。激励方式:集总端口激励。

qq_36521926的博客 4493

zip包加密上传OSS

1、先从请求看起:【请求方式】:Post,【docType】:后续会用到这个充当地址,这里前段是写死的叫这个名字,这个无所谓,先分析接口的代码流程以及思想吧【bizId】:前端用uuid做的处理。(1)、虽然这个path路径只有这个包名,但是别忘了 这个是隶属于该项目下的路径,这里从始至终,项目下的路径都不打印,如果会打印的话我也不会去写那个File的博客了。-------今天先写到这里--------由于今天上线,就有空写了写这个,这部分只是给加密的步骤解释完了,后面的下次再讲-------

yangjianing0807的博客 1205

西安交通大学软件学院——分布式系统练习题(综合题)

摘要:本文探讨了分布式系统的核心特性与关键问题。首先阐述了分布式系统的8种透明性特性,包括访问、定位、迁移等。然后通过具体案例分析了分布式事务的回滚机制、域名解析的迭代与递归过程、不同分布式系统的异同比较。重点讨论了RPC通信中客户端/服务器崩溃的处理方法,包括消灭、再生和到期三种策略。最后介绍了Lamport时间戳算法在进程通信中的应用及问题解决方案。全文涵盖了分布式系统设计中的透明性、可靠性、一致性等核心问题。

qq_73044452的博客 204

高性能优化的本质

在很早之前,处理器性能的提升一般是通过减小元器件的尺寸,增加元器件的数量,提高主频来实现,这也是摩尔定律所说的,但是由于功耗的影响,主频不能一直增加。后来,由于英伟达的GPU的并行计算的出现,逐渐打破摩尔定律,人们利用多核,SIMD,SIMT来处理大量相同计算的数据,这极大的提高了效率。计算机的算力得到了巨大的提升,但是并行是困难的,对于有数据依赖的程序来说,处理并行是一件及其困难的事,但对于一些简单的数学库的计算,并行的实现相对简单。

发狂的小花的博客 274

Java 使用OSS 文件上传+下载 简单入门

初次接触阿里云oss存储的小伙伴们,快速上手使用不可错失的文章!

qq_42697946的博客 7934

57. SAP UI5 应用基于 OData 注解的 Smart Field 使用方法学习

所谓 SAP UI5 Smart Field,顾名思义,是一类比较`智能`的控件,这类控件同 SAP UI5 传统的控件不同,会根据 SAP UI5 应用程序连接的 OData 服务中元数据里提供的注解(`annotations`),在运行时动态生成底层的 SAP UI5 控件。...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2775

阿里云oss服务器文件上传JAVA

前天做oss服务器文件上传,之前没了解过,做的过程中遇到许多问题,最终通过查阅相关资料解决了,特分享一下。 首先准备工作 必要的jar  这里注意版本一致,不然就会报很多坑爹的错误。。 如果你断点调试在执行putObject方法时报错,99%的是jar包有问题。。 然后是配置文件 现在开通oss,都是免费开通的,包年9块钱。 这是几个必要

山有多高的博客 5211

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java下载https文件上传到阿里云oss服务器

Java下载https文件上传到阿里云oss服务器 今天做了一个从Https链接中下载音频并且上传到OSS服务器,记录一下希望大家也少走弯路。 一共两个类: 1 、实现自己的证书信任管理器类 /** * @author mazhq * @Title: X509TrustUtiil * @ProjectName: zeus * @Description: 证书信...

dhmkjv0619的博客 629

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【Java】上传图片至阿里云oss服务器,文件上传以及图片base64上传

java图片上传至oss服务器,base64转图片上传。

Passer_hua的博客 3642

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

阿里云oss服务器文件上传java

阿里云oss服务器文件上传javahttp://www.bieryun.com/1251.html 前天做OSS服务器文件上传,之前没了解过,做的过程中遇到许多问题,最终通过查阅相关资料解决了,特分享一下。 首先准备工作必要的jar 这里注意版本一致,不然就会报很多坑爹的错误.. 如果你断点调试在执行putObject方法时报错,99%的是罐子包有问...

weixin_34335458的博客 303

Java图片文件上传阿里云OSS服务器

/** * */ package com.jit.comic.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import

爱吃炒饭的逗比小豆豆的博客 795

FastDFS 阿里云OSS配置与使用

1 简介 使用第三方的阿里云OOS来当文件服务器使用,稳定性相对来说比较高,容灾也方便。 官方参考地址:https://help.aliyun.com/product/31815.html?spm=5176.7933691.J_1309819.8.2f1e2a66QAuBQL 2 pom文件配置 <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</a

小P聊技术 1596

java上传文件到阿里云服务器_java上传文件到OSS云服务器(一)

之前做springboot项目中遇到文件上传到OSS云服务器,然后把文件路径返回给手机端。文件上传是java web中常见的操作,文件上传主要是将文件通过IO流传放到云服务器一、请求controller,暴露接口请求@RestController()public class UpLoadController {@PostMapping("/uploadImFile")public Response...

weixin_34566429的博客 853

移动端文件直传到阿里云oss流程(java获取sts凭证,以及callback回调)

1.快速搭建移动端文件上传流程如下 服务器只需要提供一个sts凭证的接口,以及阿里云回调的接口。 官方文档查阅:https://help.aliyun.com/document_detail/31920.html 2.获取sts凭证 在获取凭证之前先要配置相关的用户,以及RAM访问控制 如果有新建用户可以不需要新建,没有用户可以新建一个用户并且为该用户添加AliyunOSSFull...

qq_39341192的博客 4547

通过elementui-vue上传文件到本地服务器

(1)引入文件上传的依赖 (2)创建一个页面 (3)在springmvc中配置文件上传解析器 (4)创建upload接口方法 3.elementui+vue+axios完成文件上传 (1)页面的查询 (2)后台的接口 4.上传到oss阿里云的服务器 上传到本地服务器的缺点: 如果搭建集群,导致文件无法在集群中共享。 它的解决方法就是把文件专门上传到一个文件服务器上,这些tomcat服务器都操作同一个文件服务器。(1)创建bucket容器 可以在该bucket中通过网页面板的形

lpt1314的博客 3683

【一文包会】Springboot快速实现阿里云OSS文件上传功能

一文包会,阿里云OSS存储服务详解,Springboot快速实现文件上传

wenwenaier的博客 1283

阿里云oss上传文件开发

OSS开发 项目里需要

lmtzx521的博客 1023

阿里云存储OSS(服务端直传)

一、开通“对象存储OSS”服务 为了解决海量数据存储与弹性扩容,项目中我们采用云存储的解决方案- 阿里云OSS。 1、开通“对象存储OSS”服务 二、控制台使用 1、创建Bucket 命名:srb-file 读写权限:公共读 2、上传默认头像 创建文件夹avatar,上传默认的用户头像 三、使用RAM子用户 1、进入子用户管理页面 2、添加用户 3、获取子用户key AccessKeyId, AccessKeySecret 4、设置用户权限 授权:AliyunOSSFullAccess 四、落

Resst的博客 2177
下一篇: Mina学习笔记(1) mina简介
评论 18
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值