【.Net 使用阿里云OSS 存储文件】

news2025/1/23 13:20:02

一、使用NuGet安装【Aliyun.OSS.SDK】

在这里插入图片描述
注意:如果有多个项目,需要在具体使用的项目跟启动项目都安装同一版本的Aliyun.OSS.SDK

二、上传代码


using Aliyun.OSS;
using System.IO;
using System;
using CadApplication.Service.Dto;
using System.Net;
using System.Net.Sockets;

namespace CadApplication.Util
{
    public class OSSUtil
    {
        string accessKeyId = "*******"; // 设置自己的 Access Key ID
        string accessKeySecret = "*******"; // 设置自己的 Access Key Secret
        string endpoint = "*******aliyuncs.com"; // 设置自己的 Endpoint
        string bucketName = "*******"; // 设置自己的 Bucket Name   annengcadapitest


        /// <summary>
        /// 测试OSS.
        /// </summary>
        public CommonResult<OSSFileInforDto> TestOSS()
        {
            // 整体逻辑:上传服务器本地文件到阿里云OSS,然后上传成功后再获取OSS文件的存放路径


            CommonResult<OSSFileInforDto> result = new CommonResult<OSSFileInforDto>();

            // 创建 OssClient 对象
            var ossClient = new OssClient("*******.aliyuncs.com", "*******", "*******");

            // 获取本地文件路径
            string localFilePath = @"C:\Users\*******\Desktop\MonthQuery.txt"; // 设置本地文件路径

            // 指定上传到 OSS 的目标文件名称
            string fileName = Path.GetFileName(localFilePath);


            // OSS的路径 规律 年/月/日   例如:2024/1/20240101
            string filePath = DateTime.Now.Year.ToString() + "/" + DateTime.Now.Month.ToString() + "/" + DateTime.Now.ToString("yyyy-MM-dd");
            string objectName = filePath +"/"+ fileName;

            try
            {
                using (var fs = File.OpenRead(localFilePath))
                {
                    // 调用 PutObjectAsync 方法进行文件上传
                    var  putResult= ossClient.PutObject(bucketName, objectName, fs);

                    // 说明文件上传成功,然后读取到文件的存放地址,进行返回
                    if (putResult.HttpStatusCode == HttpStatusCode.OK)
                    {
                        GeneratePresignedUriRequest generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, objectName);
                        var uriResult = ossClient.GeneratePresignedUri(generatePresignedUriRequest);

                        string localHostIp = string.Empty;
                        IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName());
                        foreach (IPAddress ip in host.AddressList)
                        {
                            if (ip.AddressFamily == AddressFamily.InterNetwork)
                            {
                                localHostIp = ip.ToString();
                            }
                        }


                        // 然后返回数据的url
                        OSSFileInforDto oSSFileInforDto = new OSSFileInforDto();
                        oSSFileInforDto.FileLocalPath = localFilePath;
                        oSSFileInforDto.FileName = fileName;
                        oSSFileInforDto.LocalHostIP = localHostIp;
                        oSSFileInforDto.OSSFileUrl = uriResult.Host  + uriResult.AbsolutePath;
                        result.Data = oSSFileInforDto;
                        result.Success = true;
                        result.Message = "上传文件到OSS成功";
                    }
                    else
                    {
 
                        result.Success = false;
                        result.Message = $"上传文件到OSS失败";
                    }
                   // var  selectResult = ossClient.GeneratePresignedUri(bucketName,);

                }
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Message = $"上传文件到OSS失败{ex.Message}";
            }
            finally
            {
                // 释放资源
                 // ossClient.shutdown;
            }

            return result;

        }
    }
}

三、 遇到问题

3.1 Object reference not set to an instance of an object.

引起这个问题由两个原因:1. 启动项目里面没有安装【Aliyun.OSS.SDK】。2.启动项目里面的【Aliyun.OSS.SDK】跟实际执行代码的项目里面的【Aliyun.OSS.SDK】版本不一致。

3.2 Aliyun.OSS.Common.OssException:The specified bucket does not exist.

没有在OSS上创建Bucket(桶),使用阿里云官方工具OSS Browser 创建,也可以使用代码创建。具体可以参考阿里云官方文档:https://help.aliyun.com/zh/oss/getting-started/sdk-quick-start?spm=a2c4g.11186623.0.0.1db27586JIsQcM

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

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

相关文章

Excel 使用空格或TAB分列

1 选择“数据”>“分列”。 在“文本分列向导”中&#xff0c;选择“分隔符号”>“下一步”。 选择数据的“分隔符”。 例如&#xff0c;“逗号”和“空格”。 可在“数据预览”窗口预览数据。 选择“下一步”&#xff0c;在工作表 目标&#xff0c;在工作表中想显示拆分…

51单片机-(定时/计数器)

51单片机-&#xff08;定时/计数器&#xff09; 了解CPU时序、特殊功能寄存器和定时/计数器工作原理&#xff0c;以定时器0实现每次间隔一秒亮灯一秒的实验为例理解定时/计数器的编程实现。 1.CPU时序 1.1.四个周期 振荡周期&#xff1a;为单片机提供定时信号的振荡源的周期…

go环境安装-基于vscode的Windows安装

1、vscode安装 官网链接&#xff1a;https://code.visualstudio.com/ 选择相应的版本&#xff0c;这里选择Windows下的 下载得到一个VSCodeUserSetUp-x64的可执行文件&#xff0c;双击执行&#xff0c;选择要安装的路径&#xff0c;下一步。 2、go语言安装 官网链接&#x…

node.js提取excel中的信息填充到word文件,批量生成合同

1.npm下载 npm i pizzip docxtemplater xlsx 2.excel模板 3.word模板 4.代码 // 引入所需模块 var PizZip require(pizzip); var Docxtemplater require(docxtemplater); var fs require(fs); var path require(path); var xl require(xlsx);// 读取并导出Excel文件 …

langChain学习笔记(待续)

目录 IntroductionLLM的限制扩展理解&#xff1a;什么是机器学习扩展阅读&#xff1a;机器学习的流程 LangChain Introduction LLM的限制 大型语言模型&#xff0c;比如ChatGpt4&#xff0c;尽管已经非常强大&#xff0c;但是仍然存在一些限制&#xff1a; 知识更新&#xff…

开源现场总线协议栈(ethercat、ethernet/ip、opc ua、profinet、canopen、modbus)

ecat主站及其相关&#xff1a; 1.soem&#xff1a;GitHub - OpenEtherCATsociety/SOEM: Simple Open Source EtherCAT MasterSimple Open Source EtherCAT Master. Contribute to OpenEtherCATsociety/SOEM development by creating an account on GitHub.https://github.com/…

ARM系列 -- 虚拟化(一)

今天来研究一个有意思的话题&#xff0c;虚拟化&#xff08;virtualization&#xff09;。 开始前&#xff0c;先闲扯一下&#xff0c;最近一个词比较火&#xff0c;“元宇宙&#xff08;Metaverse&#xff09;”。在维基百科里面是这么定义元宇宙的&#xff0c;“The Metaver…

MSSQL 获取表对应的列明,备注,字段类型

旧系统代码CV多了想解放一下双手写个代码生成器&#xff0c;这时候就需要获取到表的某一些信息了 SELECT a.NAME AS colname,CONCAT(UPPER(SUBSTRING(b.name, 1, 1)), LOWER(SUBSTRING(b.name, 2,LEN(b.name)-1))) AS typename,a.length AS length,a.scale AS scale, a.prec A…

京东数据分析(电商数据分析):2024年1月京东白酒TOP10品牌销量销额排行榜

在公布2024年1月京东白酒品牌排行榜之前&#xff0c;分享一个有点意思的现象&#xff1a;在今年龙年春晚“黄金5分钟”的广告片里&#xff0c;白酒局知名的品牌基本都亮相了&#xff08;茅台、五粮液、洋河股份、郎酒、古井贡酒、水井坊&#xff09;&#xff0c;但今年汾酒却缺…

Thread多线程(创建,方法,安全,通信,线程池,并发,并行,线程的生命周期)【全详解】

目录 1.多线程概述 2.多线程的创建 3.Thread的常用方法 4.线程安全 5.线程同步 6.线程通信 7.线程池 8.其它细节知识&#xff1a;并发、并行 9.其它细节知识&#xff1a;线程的生命周期 1.多线程概述 线程是什么&#xff1f; 线程(Thread)是一个程序内部的一条执行…

安全运营中心(SOC)综合指南

什么是安全运营中心&#xff08;SOC&#xff09; 安全运营中心&#xff0c;也称为信息安全运营中心 &#xff08;ISOC&#xff09;&#xff0c;是结构良好的网络安全战略的核心。安全运营中心是一个集中式枢纽&#xff0c;无论是在组织内部还是外包&#xff0c;都致力于对整个…

非线性优化资料整理

做课题看了一些非线性优化的资料&#xff0c;整理一下&#xff0c;以方便查看&#xff1a; 优化的中文博客 数值优化|笔记整理&#xff08;8&#xff09;——带约束优化&#xff1a;引入&#xff0c;梯度投影法 (附代码)QP求解器对比对于MPC的QP求解器 数值优化| 二次规划的…

Linux命名管道

Linux匿名管道-CSDN博客 目录 1.原理 2.接口实现 3.模拟日志 Linux匿名管道-CSDN博客 这上面叫的是匿名管道&#xff0c;不要将两者搞混&#xff0c;匿名管道说的是两个有血缘关系的进程相互通信&#xff0c;但是命名管道就是两个没有关系的管道相互通信。 1.原理 和匿名…

Mysql的备份还原

模拟环境准备 创建一个名为school的数据库&#xff0c;创建一个名为Stuent的学生信息表 mysql> create database school; Query OK, 1 row affected (0.00 sec)mysql> use school; Database changed mysql> CREATE TABLE Student (-> Sno int(10) NOT NULL COMME…

Leetcode3045. 统计前后缀下标对 II

Every day a Leetcode 题目来源&#xff1a;3045. 统计前后缀下标对 II 解法1&#xff1a;字典树 将这个列表哈希化&#xff1a;idx (s[i] - ‘a’) * 26 (s[j] - ‘a’)。 枚举 twords[j]&#xff0c;怎么统计有多少个 swords[i] 是 t 的前缀&#xff1f; 这可以用字典树…

[Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包

一、设置应用包名 在Flutter开发中&#xff0c;修改应用程序的包名&#xff08;也称作Application ID&#xff09;涉及几个步骤&#xff0c;因为包名是在项目的Android和iOS平台代码中分别配置的。请按照以下步骤操作&#xff1a; 1.Android Flutter工程中全局搜索替换包名 …

[Mac软件]Adobe Substance 3D Stager 2.1.4 3D场景搭建工具

应用介绍 Adobe Substance 3D Stager&#xff0c;您设备齐全的虚拟工作室。在这个直观的舞台工具中构建和组装 3D 场景。设置资产、材质、灯光和相机。导出和共享媒体&#xff0c;从图像到 Web 和 AR 体验。 处理您的最终图像 Substance 3D Stager 可让您在上下文中做出创造性…

Window10安装ruby

最好的方法&#xff0c;使用rubyinstaller&#xff0c;即在Downloads。 这是官方推荐的安装方式 通常来说我们会下载64位的 下载完后执行下载的exe即可。在最后一步会提示让安装gem&#xff0c;选则安装即可。 然后就可以在控制台进行测试了。

axios接口请求超时,重试方法

import axios from "axios"; import { Message } from "element-ui";const service axios.create({baseURL: xxxx,timeout: 2000,//超时时间retry: 3, //设置全局重试请求次数&#xff08;最多重试几次请求&#xff09;retryDelay: 1000, //设置全局请求间…

如何在有限的预算里做好服务器的DDOS防护?

在网络安全领域&#xff0c;防御分布式拒绝服务&#xff08;DDoS&#xff09;攻击是一项持续且复杂的挑战。尤其对于预算有限的组织来说&#xff0c;如何在不牺牲安全性的前提下进行有效的防护&#xff0c;更是一个需要深思熟虑的问题。以下是一些建议&#xff0c;帮助你在有限…