.NET CORE Aws S3 使用

1.安装指定的包

 Install-Package AWSSDK.S3 -Version 3.3.104.10

2.使用帮助类

using System;
using System.Collections.Generic;
using System.Text;
using Amazon;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using System.IO;
using System.Threading.Tasks;namespace xx.xx.xx.Helper
{public class AwsS3Helper{/// <summary>/// 地区是亚太香港/// </summary>readonly RegionEndpoint bucketRegion = RegionEndpoint.GetBySystemName("xx");/// <summary>/// 要向 Amazon S3 上传数据(照片、视频、文档等),/// 您必须首先在其中一个 AWS 区域中创建 S3 存储桶, 比如:在亚太香港地址,创建了一个gfbk桶/// 然后,您可以将任何数量的对象上传到该存储桶。/// 每个 AWS 账户中创建多达 100 个存储桶,一个存储桶中可以存储任意数量的对象。/// 资料:https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/UsingBucket.html/// </summary>readonly string bucketName = Appsettings.GetNode("AwsBucketName");/// <summary>/// 请求S3的凭据/// </summary>readonly AWSCredentials awsCredentials = new BasicAWSCredentials(Appsettings.GetNode("AwsAccessKey"), Appsettings.GetNode("AwsSecretKey"));/// <summary>/// 请求客户端/// </summary>AmazonS3Client client = null;/// <summary>/// 上传资源类型/// </summary>ResourceType _resourceType;public AwsS3Helper(ResourceType resourceType){_resourceType = resourceType;client = new AmazonS3Client(awsCredentials, bucketRegion);}/// <summary>///创建一个桶/// </summary>/// <returns></returns>public async Task CreateBucket(){var putBucketRequest = new PutBucketRequest{BucketName = bucketName,UseClientRegion = true};PutBucketResponse putBucketResponse = await client.PutBucketAsync(putBucketRequest);string bucketLocation = await FindBucketLocationAsync(client);}/// <summary>/// 查找桶所在的地区/// </summary>/// <param name="client"></param>/// <returns></returns>private async Task<string> FindBucketLocationAsync(IAmazonS3 client){string bucketLocation;var request = new GetBucketLocationRequest(){BucketName = bucketName};GetBucketLocationResponse response = await client.GetBucketLocationAsync(request);bucketLocation = response.Location.ToString();return bucketLocation;}/// <summary>/// 上传文件/// </summary>/// <param name="uploadFilePath">上传的文件地址如:E:\test.jpg</param>/// <returns></returns>public async Task<bool> WritingAnObjectAsync(string uploadFilePath){try{string filename = uploadFilePath.Substring(uploadFilePath.LastIndexOf('\\') + 1);string key = string.Format("resource/img/{0}/{1}", _resourceType.ToString().Replace("Img", ""), filename);var putRequest2 = new PutObjectRequest{BucketName = bucketName,//获取和设置键属性。此键用于标识S3中的对象,上传到s3的路径+文件名,//S3上没有文件夹可以创建一个,参考https://www.cnblogs.com/web424/p/6840207.htmlKey = key,//所有者获得完全控制权,匿名主体被授予读访问权。如果//此策略用于对象,它可以从浏览器中读取,无需验证CannedACL = S3CannedACL.PublicRead,//上传的文件路径FilePath = uploadFilePath,//为对象设置的标记。标记集必须编码为URL查询参数TagSet = new List<Tag>{new Tag { Key = "Test", Value = "S3Test"} }//ContentType = "image/png"};putRequest2.Metadata.Add("x-amz-meta-title", "AwsS3Net");PutObjectResponse response2 = await client.PutObjectAsync(putRequest2);return true;}catch (AmazonS3Exception e){throw new Exception(string.Format("Error encountered ***. Message:'{0}' when writing an object", e.Message));}catch (Exception e){throw new Exception(string.Format("Unknown encountered on server. Message:'{0}' when writing an object", e.Message));}}/// <summary>/// 上传文件 (未经测试)/// </summary>/// <param name="inputStream">以流的形式</param>/// <returns></returns>public async Task<bool> WritingAnObjectByStreamAsync(Stream inputStream, string key, string contenttype){//string key = string.Format("resource/img/{0}/{1}", _resourceType.ToString().Replace("Img", ""), filename);try{var putRequest1 = new PutObjectRequest{BucketName = bucketName,//创建对象时,要指定键名,它在存储桶中唯一地标识该对象Key = key,CannedACL = S3CannedACL.PublicRead,//放开存储InputStream = inputStream,ContentType = contenttype};PutObjectResponse response1 = await client.PutObjectAsync(putRequest1);return true;}catch (AmazonS3Exception e){throw new Exception(string.Format("Error encountered ***. Message:'{0}' when writing an object", e.Message));}catch (Exception e){throw new Exception(string.Format("Unknown encountered on server. Message:'{0}' when writing an object", e.Message));}}/// <summary>/// 删除一个对象/// </summary>/// <param name="key">删除的对象的键如:resource/img/basketballnews/test1.jpg</param>/// <returns></returns>public async Task<bool> DeleteAnObjectAsync(string key){try{// 1. Delete object-specify only key name for the object.var deleteRequest1 = new DeleteObjectRequest{BucketName = bucketName,Key = key};DeleteObjectResponse response1 = await client.DeleteObjectAsync(deleteRequest1);return true;}catch (AmazonS3Exception e){throw new Exception(string.Format("Error encountered ***. Message:'{0}' when writing an object", e.Message));}catch (Exception e){throw new Exception(string.Format("Unknown encountered on server. Message:'{0}' when writing an object", e.Message));}}/// <summary>/// 获取/// </summary>/// <param name="prefix">限制对以指定前缀开头的键的响应</param>/// <returns></returns>public async Task<List<S3Object>> ListObjectsAsync(string prefix = ""){try{var list = new ListObjectsRequest{BucketName = bucketName,Prefix = prefix};ListObjectsResponse response1 = await client.ListObjectsAsync(list);return response1.S3Objects;}catch (AmazonS3Exception e){throw new Exception(string.Format("Error encountered ***. Message:'{0}' when writing an object", e.Message));}catch (Exception e){throw new Exception(string.Format("Unknown encountered on server. Message:'{0}' when writing an object", e.Message));}}}public enum ResourceType{xx,xx,xx,xx,xx,xx,xx,xx}
}

3.接口请求

 [HttpPost][Route("uploadfils")]public async Task<ActionResult<Result>> UploadFiles(List<IFormFile> files, [FromQuery] int type, string filetype){var rtype = new ResourceType();AwsS3Helper awss3 = new AwsS3Helper(rtype);try{if (files == null && files.Count == 0){return ApiResultHelper.renderError("未选择上传的文件!");}foreach (var file in files){if (file.Length > 0){using (var stream = file.OpenReadStream()){var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');//拼接地址string key = string.Format("resource/{0}/{1}/{2}", filetype, "xx", fileName);var result = await awss3.WritingAnObjectByStreamAsync(stream, key, file.ContentType);}}}return ApiResultHelper.renderSuccess();}catch (Exception e){return ApiResultHelper.renderError();}}/// <summary>/// 删除aws s3数据/// </summary>/// <param name="key"></param>/// <returns></returns>[HttpPost][Route("deletefiles")]public async Task<ActionResult<Result>> DeleteFiles(string key){var rtype = new ResourceType();AwsS3Helper awss3 = new AwsS3Helper(rtype);try{if (!string.IsNullOrEmpty(key)){var result = await awss3.DeleteAnObjectAsync(key);if (result){return ApiResultHelper.renderSuccess(true);}}return ApiResultHelper.renderError();}catch (Exception e){return ApiResultHelper.renderError();}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring存储基础知识

一、对象存储 1.创建bean对象 public class User {public void sayHi() {System.out.println("hi student");} } 2.bean存入Spring 在spring-config.xml&#xff0c;将 bean&#xff08;com.spring.demo.User&#xff09;存到 Spring 容器中&#xff0c;它的名称…

【数据结构学习笔记】选择排序

【数据结构学习笔记】选择排序 参考电子书&#xff1a;排序算法精讲 算法原理 首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;大&#xff09;元…

读取CSV数据并写入MySQL

import pandas as pd #import tushare as ts from sqlalchemy import create_engineimport baostock as bs #### 登陆系统 #### lg bs.login() # 显示登陆返回信息 print(login respond error_code:lg.error_code) print(login respond error_msg:lg.error_msg) #### 获取沪深…

STM32第十课:串口发送

一、usart串口 1.1 USART串口协议 串口通讯(Serial Communication) 是一种设备间非常常用的串行通讯方式&#xff0c;因为它简单便捷&#xff0c;因此大部分电子设备都支持该通讯方式&#xff0c;电子工程师在调试设备时也经常使用该通讯方式输出调试信息。在计算机科学里&…

主流数据库的区别

几个主流的数据库有&#xff1a; 1. MySQL&#xff1a;MySQL是一种关系型数据库管理系统&#xff0c;常用于Web应用程序开发和数据存储。 2. Oracle&#xff1a;Oracle是一种关系型数据库管理系统&#xff0c;由Oracle Corporation开发和销售。它广泛用于企业级应用程序中。 …

在使用qml的qmldir文件创建常用组件报错unknow component

解决方法&#xff1a;Qt Creator中的工具-->QML/JS-->重置代码模型 参考博文:QML自定义模块及qmldir的使用_同一资源文件目录下的qml模块使用-CSDN博客 不一样的地方是我给我的文件起了别名 以及我的qrc文件路径有前缀/qml 总体操作&#xff1a; 1.使用模块中的组件时…

线程与进程的区别、协程

1【线程与进程的区别、协程】 【1】 进程跟线程 进程&#xff08;Process&#xff09;和 线程&#xff08;Thread&#xff09;是操作系统的基本概念&#xff0c; 但是它们比较抽象&#xff0c; 不容易掌握。关于多进程和多线程&#xff0c;教科书上对经典的一句话“进程是资源分…

铭文:探索比特币世界的数字印记

铭文是什么&#xff1f; 铭文指的是在某种物品&#xff08;如石头、硬币、平板等&#xff09;上刻有文字。在比特币领域&#xff0c;铭文指的是刻在聪&#xff08;satoshi&#xff09;上的元数据。比特币的最小单位是聪&#xff0c;1比特币可分为1亿聪。每个聪都通过序数理论进…

解决WSL2的ubuntu20.04中安装docker出现无法连接的问题(Cannot connect to the Docker daemon)

wsl2的ubuntu20.04系统安装docker可以参考官网教程操作&#xff0c;我个人喜欢参考其中的离线安装方式&#xff1a;Install from a package。只需要按照官网一步步操作即可&#xff0c;跟普通的ubuntu20.04的安装是一样的步骤。 在安装完以后&#xff0c;发现一旦使用docker相…

OpenAI GPT LLMs 高级提示词工程方法汇总

原文地址&#xff1a;An Introduction to Prompt Engineering for OpenAI GPT LLMs Github&#xff1a;Prompt-Engineering-Intro 2023 年 3 月 2 日 提示工程指南 | Prompt Engineering Guide Naive 提示词&#xff1a;带有提示的情感分类器 prompt Decide whether a T…

计算机缺失iutils.dll怎么办,分享5种靠谱的解决方法

​在计算机系统运行过程中&#xff0c;如果发现无法找到或缺失iutils.dll文件&#xff0c;可能会引发一系列的问题与故障。首先&#xff0c;由于iutils.dll是系统中一个重要的动态链接库文件&#xff0c;它的主要功能可能涉及到系统核心服务、应用程序支持或者特定功能模块的运…

互联网高频面:输入URL按下回车后,中间发生了什么

题目 输入URL按下回车后&#xff0c;中间发生了什么 这个问题其实是计算机网络里面很经典的一个问题&#xff0c;不能去死机硬背&#xff0c;很考察对网络架构和通信原理的理解&#xff0c;也是各个互联网大厂喜欢考察的面试题。 一些图片参考了小林的计算机网络面经 从输入…

“光谱视界革新:ChatGPT在成像光谱遥感中的智能革命“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…

LeetCode(力扣)算法题_2864_最大二进制奇数

最大二进制奇数 题目描述 给你一个 二进制 字符串 s &#xff0c;其中至少包含一个 1 。 你必须按某种方式 重新排列 字符串中的位&#xff0c;使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。 以字符串形式&#xff0c;表示并返回可以由给定组合生成的最大二进…

爬虫案例2:playwright 超爽体验

参考链接&#xff1a;https://playwright.bootcss.com/python/docs/intro 目标网站&#xff1a;https://spa6.scrape.center/通过观察&#xff0c;页面的信息是通过Ajax请求后返回的信息 下面使用playwright实现绕过token的获取直接拿到返回的数据import asyncio import json f…

Docker安装达梦数据库(DM8)

安装目录 mkdir /opt/dm8 /opt/dm8/datadir && cd /opt/dm8 && chmod 777 /opt/dm8 /opt/dm8/datadir 下载镜像 yum -y install wget && wget https://download.dameng.com/eco/dm8/dm8_20230808_rev197096_x86_rh6_64_single.tar 导入镜像 docker loa…

深入挖掘C语言之——联合

目录 联合的定义 联合的特点 联合的应用场景 在C语言中&#xff0c;联合&#xff08;Union&#xff09;是一种特殊的数据结构&#xff0c;它允许在同一内存地址存储不同类型的数据。与结构体&#xff08;Struct&#xff09;不同的是&#xff0c;联合中的所有成员共享同一块内…

C语言--从零开始的扫雷游戏

C语言--从零开始的扫雷游戏 1. 游戏说明2. 总体代码3. 详细讲解3.1 菜单部分3.2 游戏主体部分3.2.1 总体分析3.2.2 棋盘初始化3.2.3 棋盘展示3.2.4 设置地雷3.2.5 扫雷阶段3.2.6 统计雷个数的代码3.2.7 使用迭代的方式进行展开&#xff1a;3.2.8 扫雷部分主体代码 4. 总结 1. 游…

docker常用操作-docker私有仓库的搭建(Harbor),并将本地镜像推送至远程仓库中。

1、docker-compose安装&#xff0c;下载docker-compose的最新版本 第一步&#xff1a;创建docker-compose空白存放文件vi /usr/local/bin/docker-compose 第二步&#xff1a;使用curl命令在线下载&#xff0c;并制定写入路径 curl -L "https://github.com/docker/compos…

Linux学习:基础开发工具的使用(1)

目录 1. Linux软件包管理器&#xff1a;yum工具1.1 yum是什么&#xff08;软件商城&#xff09;1.2 yum的使用1.3 yum的背景生态 2. 项目开发与集成开发环境3. vim编辑器3.1 vim编辑器的常见模式与模式切换3.3 vim编辑器的使用3.3.1 命令模式下的常见命令&#xff1a;3.3.2 vim…