NetMvc通过亚马逊方式服务器端和客户端上传MinIO顺利解决

Minio上传文件- 修改content-type(S3 Browser) Mino上传文件- 修改content-type,使用S3 Browser 阅读详情

前言:

1、由于项目是.NET Framework 4.7 MVC LayUI,所以需要找一个资源站点存放项目中静态资源文件;

2、需要支持服务端和客户端都支持上传文件方式;

3、调用简单,涉及库越少越好。

结果:

调用 AWSSDK.S3 和 AWSSDK.Core 实现文件上传到 MinIO ;调用MimeMapping获取文件ContentType

MinIO

Minio是Apache License v2.0下发布的对象存储服务器。它与Amazon S3云存储服务兼容。它最适合存储非结构化数据,如照片,视频,日志文件,备份和容器/ VM映像。对象的大小可以从几KB到最大5TB Minio服务器足够轻,可以与应用程序堆栈捆绑在一起,类似于NodeJS,Redis和MySQL。

AWS S3

全称:(Amazon Simple Storage Service), 是一种面向网络的存储服务,可以支持用户随时在Web的任何位置,存储和检索任意大小的数据本身也提供了简单而直观的管理控制台来处理这些任务,但我这里使用的是,面向C# 方向的S3网络存储服务。

具体调研实现方法如下

1、服务器的配置

推荐版本:minio.RELEASE.2022-05-26T05-48-41Z

当前版本文件可来取自如。

2、服务端上传实现代码

需要NuGit调用有三项

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="AWSSDK.Core" version="3.7.304.16" targetFramework="net47" />
  <package id="AWSSDK.S3" version="3.7.309.4" targetFramework="net47" />
  <package id="MimeMapping" version="3.0.1" targetFramework="net47" />
</packages>

具体实现代码

using Amazon;
using Amazon.Runtime;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.IO;
using System.Net;
using System.Threading.Tasks;

namespace DealMvc.AmazonS3 {
    /// <summary>
    /// 实现MinIO文件的上传
    /// 调用 AWSSDK.S3 和 AWSSDK.Core 
    /// 文件的 ContentType 调用 MimeMapping 实现
    /// </summary>
    public class AmazonHelper {
        /// <summary>
        /// Bucket访问AccessKey
        /// </summary>
        readonly string AccessKey = "admin";
        /// <summary>
        /// Bucket访问SecretKey
        /// </summary>
        readonly string SecretKey = "123456+++";
        /// <summary>
        /// 存储桶名称
        /// </summary>
        readonly string BucketName = "test";
        /// <summary>
        /// 服务地址
        /// </summary>
        readonly string ServiceURL = "http://192.168.20.66:9000";
        /// <summary>
        /// 预览地址
        /// </summary>
        readonly string WebURL = "https://res.test.cn";
        /// <summary>
        /// 
        /// </summary>
        //readonly string awsRegion = "us-east-1";

        readonly AmazonS3Client client;
        /// <summary>
        /// 构造函数
        /// </summary>
        public AmazonHelper() {
            //提供awsAccessKeyId和awsSecretAccessKey构造凭证
            var credentials = new BasicAWSCredentials(AccessKey, SecretKey);
            //提供awsEndPoint(域名)进行访问配置
            var clientConfig = new AmazonS3Config {
                // 必须在设置ServiceURL前进行设置,并且需要和`MINIO_REGION`环境变量一致。
                //RegionEndpoint = RegionEndpoint.GetBySystemName(awsRegion),
                RegionEndpoint = RegionEndpoint.USEast1,
                // 替换成你自己的MinIO Server的URL
                ServiceURL = ServiceURL,
                // 必须设为true
                ForcePathStyle = true,
            };
            client = new AmazonS3Client(credentials, clientConfig);
        }

        #region 上传文件
        /// <summary>
        /// 上传文件[本地]
        /// </summary>
        /// <param name="key"></param>
        /// <param name="filePath">路径</param>
        /// <returns>网址</returns>
        public async Task<string> UploadFilePath(string saveKey, string filePath) {
            var request = new PutObjectRequest {
                BucketName = BucketName,
                Key = saveKey,
                ContentType = GetContentType(saveKey),
                FilePath = filePath,
            };
            var response = await client.PutObjectAsync(request);
            //
            return WebUrlKey(response.HttpStatusCode, saveKey);
        }
        /// <summary>
        /// 上传文件[流]
        /// </summary>
        public async Task<string> UploadInputStream(string saveKey, Stream inputStream) {
            var request = new PutObjectRequest {
                BucketName = BucketName,
                Key = saveKey,
                ContentType = GetContentType(saveKey),
                InputStream = inputStream //File.OpenRead
            };
            var response = await client.PutObjectAsync(request);
            //
            return WebUrlKey(response.HttpStatusCode, saveKey);
        }
        #endregion

        /// <summary>
        /// 客户端上传文件
        /// </summary>
        public string GetPreSignedUrl(string saveKey) {
            var request = new GetPreSignedUrlRequest {
                BucketName = BucketName,
                Key = saveKey,
                Expires = DateTime.UtcNow.AddMinutes(15),
                Verb = HttpVerb.PUT,
                ContentType = GetContentType(saveKey),
                Protocol = Protocol.HTTP // 指定使用HTTPS协议
            };
            var url= client.GetPreSignedURL(request);
            return url;
        }

        #region 私有方法
        /// <summary>
        /// 根据文件Key返回预览地址
        /// </summary>
        private string WebUrlKey(HttpStatusCode statusCode, string saveKey) {
            if (statusCode != System.Net.HttpStatusCode.OK)
                throw new Exception("上传文件失败");
            return WebURL + "/" + BucketName + "/" + saveKey;
        }

        /// <summary>
        /// 根据文件获取ContentType
        /// </summary>
        private string GetContentType(string saveKey) {
            return MimeMapping.MimeUtility.GetMimeMapping(Path.GetFileName(saveKey));
        } 
        #endregion
    }
}

控制器中实现代码


// 用于服务端本地文件
[HttpGet]
public async Task<ActionResult> UpFilePathAmazon() {
    var filePath = @"D:\a\KAT\01.jpg";
    var key = "kat/" + 0L.NewLongId() + System.IO.Path.GetExtension(filePath);
    var url = await amazon.UploadFilePath(key, filePath);
    return Content(url);
}

// 用于服务端上传文件
[HttpGet]
public async Task<ActionResult> UpFileStreamAmazon() {
    ///pdfFile[0].OpenReadStream()
    var filePath = @"D:\a\KAT\02.jpg";
    var key = "kat/" + 0L.NewLongId() + System.IO.Path.GetExtension(filePath);
    var stream = System.IO.File.OpenRead(filePath);
    var url = await amazon.UploadInputStream(key, stream);
    return Content(url);
}

// 用于客户端上传文件
[HttpPost]
public ActionResult UploadImgUrl(string filename) {
    string fileType = "images";
    string fileExt = System.IO.Path.GetExtension(filename).ToLower();
    string saveKey = fileType+"/" + 0L.NewLongId() + fileExt;
    var url = new DealMvc.AmazonS3.AmazonHelper().GetPreSignedUrl(saveKey);

    return JsonMessageData(new{
        url,
    });
}

前端页面实现方式(代码中涉及到)

代码中涉及到LayUI前端框架如下:

上传组件 upload - Layui 文档

HTML代码

<form class="layui-form" lay-filter="subform">
    <div class="layui-form-item">
        <label class="layui-form-label"><em>*</em>广告图片</label>
        <div class="layui-input-inline" style="width: 660px;">
            <div class="flex align-center margin-bottom-sm">
                <button type="button" class="layui-btn layui-btn-primary layui-border-green layui-btn-sm margin-right-sm" id="ID-PicUrl">
                    <i class="layui-icon layui-icon-upload"></i> 上传图片
                </button>
                <div class="">宽高比例按4:3,格式png、jpg</div>
            </div>
            <input name="PicUrl" lay-verify="required" lay-reqtext="请上传 广告图片" autocomplete="off" class="layui-input" />            
        </div>
    </div>
    <div class="layui-form-item">
        <div class="layui-input-block">
            <button type="button" class="layui-btn" onclick="uploadFile()">Upload</button>
        </div>
    </div>
</form>

JavaScript代码

layui.use(function () {
    var upload = layui.upload;
    var layer = layui.layer;

    //执行upload组件实例
    upload.render({
        auto: false,//选择文件后不自动上传
        elem: '#ID-PicUrl', //绑定元素
        acceptMime: 'image/jpeg, image/png, image/gif',
        choose: function (obj) {

            //start
            var files = obj.pushFile(), thisStart = 0, keysArray = Object.keys(files);
            if (files && keysArray.length > 0) {
                keysArray.forEach(function (key) {
                    if (thisStart === keysArray.length - 1) {
                        let index = key
                            , file = files[key]
                            , resultObj = files[key]
                            ;
                        let requestData = {};
                        if (file && file.name) {
                            thisFilename = file.name;
                            requestData = { filename: thisFilename };
                        }
                        UploadToken(file, requestData);
                    } else {
                        layer.msg("上传时发生异常,请重试 ~ ", { icon: 2, time: 1500 });
                    }
                    thisStart++;
                });
            }

        }
        , error: function () {
            layer.alert("网络异常,请重试 ~ ", { title: "上传失败提示", icon: 2, })
        }
    });
    
    // 通过文件名称获取到服务器存放路径
    var UploadToken = (file, requestData) => {
        $.ajax({
            url: "/File/UploadImgUrl",
            type: "POST",
            data: requestData,
            dataType: "json",
            success: function (result) {
                //console.log("token", result)
                if (result.status) {
                    let thisData = result.data;
                    UploadLoadeer(file, thisData)
                } else {
                    layer.alert("网络异常,请重试 ~ ", { title: "上传失败提示", icon: 2, })
                }
            },
            error: function () {
                layer.alert("网络异常,请重试 ~ ", { title: "上传失败提示", icon: 2, })
            }

        });
    }
    
    // 通过XMLHttpRequest 方式将文件上传到服务器
    var UploadLoadeer = (file, thisData) => {
        let { url } = thisData;
        console.log(url);
        // 使用预签名URL上传文件
        const xhr = new XMLHttpRequest();
        xhr.open('PUT', url, true);
        xhr.setRequestHeader('Content-Type', file.type);
        xhr.onload = function () {
            if (xhr.status === 200) {
                alert('File uploaded successfully.');
            } else {
                alert('File upload failed.');
            }
        };
        xhr.send(file);
    }
});
Minio部署指南:Windows与Linux双平台实战_版本号[minio.RELEASE.2022-05-26T05-48-41Z] 本文详细介绍了Minio在Windows和Linux双平台上的部署指南,包括环境准备、系统服务化配置、故障排查及性能调优等实用技巧。Minio作为高性能对象存储解决方案,兼容AWS S3协议,适合存储非结构化数据,部署简单且支持分布式扩展。 阅读详情

相关推荐

【Linux】安装minio

/home/minio/minio.log 2>&1 :控制台日志重定向到/home/minio/minio.log文件中。--console-address :9002:指定控制台端口。--address :9001:指定API端口。/home/minio/data:指定存储目录。./minio server:启动命令。

take_it_easy_hes的博客 1347

minio上传文件在文件服务器上显示的是xl.meta的形式

近期安装minio的时候,安装好之后,在web上传一张图片后,然后去服务器上看文件储存的形式,一看是xl.meta形式,于是我就开始百度搜索,原来是版本问题,于是我安装了老版本版本 RELEASE.2022-05-26T05-48-41Z。

m0_48622075的博客 5178

minio RELEASE.2022-05-26T05-48-41Z Windows版含mc

minio server,windows版本含mc,minio version RELEASE.2022-05-26T05-48-41Z, mc version RELEASE.2022-05-09T04-08-26Z。吐槽官网下载太慢了

Minio安装教程_Windows和Linux_版本号[minio.RELEASE.2022-05-26T05-48-41Z]

创建一个 systemd 服务单元文件 /etc/systemd/system/minio.service,并将以下内容粘贴进去。使用 curl 命令从 MinIO 官方网站下载指定版本的 MinIO 二进制文件。从 MinIO 官方网站下载指定版本的 MinIO 二进制文件。创建一个环境变量文件 /etc/default/minio,并将以下内容粘贴进去。下载安装包,解压如下。

weixin_43924342的博客 1713

minio.RELEASE.2022-05-26T05-48-41Z版本windows一件安装脚本,包括开机启动服务和卸载服务

minio.RELEASE.2022-05-26T05-48-41Z版本windows一件安装脚本,包括开机启动服务和卸载服务

MinIO:与 Amazon S3 API 兼容的高性能对象存储服务器-开源

MinIO 是一个高性能的对象存储服务器,它的 API 与 Amazon S3 云存储服务兼容。 MinIO 可以轻松为机器学习、分析和应用程序数据工作负载构建高性能、云原生数据基础架构。 它非常快,使对象存储能够作为各种工作负载的主要存储层运行。 它还被构建为云原生和企业就绪。 MinIO 正在全球范围内用于各种生产部署,并且作为业界下载次数最多的对象存储服务器处于领先地位。

MinIO使用客户端进行桶和对象的管理

minio安装完成后,除了自带的webui管理界面,还可以使用官方配套的客户端mc进行管理。除此之外,还可以使用第三方客户端s3browser也可以完成对象和桶的生命周期管理。

lldhsds的专栏 5687

MinIO是与Amazon S3 API兼容的高性能对象存储服务器-Golang开发

Minio快速入门指南Minio是根据Apache License v2.0发布的对象存储服务器。 它与Amazon S3云存储服务兼容。 MinIO最适合存储照片,视频,日志等非结构化数据。MinIO快速入门指南MinIO是根据Apache License v2.0发布的高性能对象存储。 它与Amazon S3云存储服务兼容。 使用MinIO构建用于机器学习,分析和应用程序数据工作负载的高性能基础架构。 Docker容器稳定docker pull minio / minio docker run -p 9000:9000 minio / minio server / data Edge docker pull minio / minio:edge docker run -p 9000:9000 minio / minio:edge server / data注意:Docker不会

可视化的对象存储服务

可视化的对象存储服务MinIO简介安装MinIO Console使用如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表 MinIO简介 MinIO 是一款基于Go语言的高性能对象存储服务,它采用了Apache License v2.0开源协议,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 安装 使用Docker安装MinIO服务非常简单,几个命令就可以搞定! 1.首先下载MinIO的Docker镜像; docker pull mini

mry6的博客 5235

银河麒麟V10SP1系统盘瘦身指南:如何制作一个只含必需软件的轻量级安装镜像

本文详细介绍了银河麒麟V10SP1系统盘瘦身的完整流程,从依赖分析到最小化镜像构建,帮助用户创建只含必需软件的轻量级安装镜像。通过智能包筛选、KickStart定制和性能优化,显著减少ISO体积和部署时间,适用于服务器批量部署等场景。

weixin_26765287的博客 404

卡门涡街可视化实战:从网格加密策略到动画后处理技巧

本文详细介绍了利用ANSYS Fluent进行卡门涡街可视化模拟的全流程,包括网格加密策略、求解器设置、涡街捕捉及动画后处理技巧。通过计算流体力学(CFD)方法,帮助工程师和研究人员高效模拟圆柱绕流现象,优化工程设计。

weixin_29309785的博客 414

2022.05.06

课时34 存储过程 比如说下面这个表,查询一部分数据。 先新建一个“查询”。 然后写结构。 接着在“begin”和“end”中间写内容。以查寻性别为“1”的记录为例。 那么如何查询刚刚创建的存储过程呢? 接着用关键字调用储存过程。 存储过程实际就是把程序封装一下。 接下来看看存储过程中的变量。 创建插入数据的存储过程。 课时35 试着调用。 那么是否有那么多数据呢? 没有索引的情...

ifuudoudou的博客 162

NVIDIA vGPU三种授权方式(个人玩家版)

NVIDIA vGPU三种方式搭建授权服务器(个人玩家版)

wstc2689784536的博客 8436

如何在Windows 10 上定时备份线上Minio 资源

如何在Windows 10 上定时备份线上Minio 资源

暗星涌动 3257

保姆级教程:用Python+OpenCV搞定Orbbec Gemini深度与彩色流对齐(附完整代码)

本文提供了一份详细的Orbbec Gemini深度与彩色流对齐教程,涵盖从环境配置到完整代码实现的每一步。通过解析深度流对齐原理,对比不同对齐模式,并提供工业级应用中的问题排查方法,帮助开发者快速掌握Orbbec Gemini相机的使用技巧。文章还包含进阶应用如点云生成与三维重建的实战代码。

weixin_29090917的博客 470

FPGA实战:AXI BRAM Controller写时序避坑指南(附Vivado配置步骤)

本文深入探讨了FPGA开发中AXI BRAM Controller的写时序实战要点与常见陷阱。文章聚焦于写地址与写数据通道的握手机制,详细解析了AWREADY、WVALID等关键信号的处理,并提供了Vivado中流水线深度、ECC等关键参数的配置步骤与优化建议,旨在帮助开发者有效规避时序问题,提升系统性能。

weixin_32306683的博客 170

使用S3 Browser连接本地MinIO

Secret Access Key: 你的 MinIO Secret Key(默认:minioadmin)Access Key ID: 你的 MinIO Access Key(默认:minioadmin)Use secure transfer (SSL/TLS): ❌ 取消勾选(除非启用了 SSL)Account Name: MinIO(自定义名称)安装并启动 S3 Browser。

schinber的博客 912

STM32 ST-LINK Utility固件烧录全流程详解与实战技巧

本文详细解析了使用STM32 ST-LINK Utility进行固件烧录的全流程与实战技巧。从硬件连接、软件安装、核心三步操作(连接、擦除、烧录)到进阶的选项字节配置与批量脚本烧录,提供了完整的避坑指南和问题排查方案,帮助开发者高效完成STM32程序下载。

lambda的博客 768

Windows Docker 部署 MinIO 对象存储服务

MinIO 是一款高性能、分布式的对象存储系统,是基于 Go 语言开发的,提供S3兼容的对象存储服务。可以运行在标准硬件上,非常适合存储大容量非结构化的数据,如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。它的对象文件可以是任意大小,从几 kb 到最大 5T 不等。

菜鸟厚非 4万+

多出来的那一截:Java 堆外内存 OOM 的来源分账、分流排查与治理解析

Java进程的RES常比-Xmx多出一截,堆却平稳。本文把堆外内存拆成直接缓冲区、Unsafe、JNI本地库、线程栈、元空间与文件映射六类,用JDK 8与17的六组实验对照RSS、NMT、BufferPool三本账:clear()不释放内存;MaxDirectMemorySize默认约等于堆上限且只管直接缓冲区;禁用显式GC会让申请线程退避半秒后失败;未关闭的Deflater零GC下让RSS涨1GB;Netty池内泄漏GC救不回。最后给出定性、对账、定位的排查路线与预算、编码、监控三层治理。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 14万+

AWR2243的等效相位中心与虚拟通道

在俯仰维方向上,不重合的虚拟通道有8个,排序为1:4,9:12。每个虚拟阵元之间的间隔为lambda/2。实际y轴方向虚拟阵列只跨越了8*lambda/2的距离。等效相位中心与虚拟通道类似,只是每个相位中心之间间隔为lambda/4,实际y轴方向等效相位中心只跨越了8*lambda/4=7.59mm的距离

qq_50974341的博客 1981

麒麟V10安装MinIO

1 下载MinIO下载历史版本https://dl.min.io/server/minio/release/minio.RELEASE.2022-05-26T05-48-41Z2上传到安装目录登录后复制 #创建安装目录 $ mkdir -p /usr/local/minio/ #进入安装目录 $ cd /usr/l...

weixin_36946880的博客 476

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ASP.NET Core MVC 从入门到精通之文件上传

项目创建,启动运行,以及命名约定,创建控制器,视图,模型,接收参数,传递数据ViewData,ViewBag,路由,页面布局,wwwroot和客户端库,Razor语法,EnityFrameworkCore与数据库,HttpContext,Request,Response,Session,序列化。在实际应用开发中,文件上传是非常常见的功能,文件上传主要分为单文件上传,多文件上传,文件与其他内容混合上传,大文件上传几种情况,本文会分别讲解。在form表单中,除了文件上传控件,还有一个文件框,用于输入名称。

绳锯木断,水滴石穿,专心写文,无问西东!!! 2513

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

最简minio s3服务器安装教程

wget http://dl.minio.org.cn/server/minio/release/linux-amd64/minio chmod +x minio /bin/mv minio /usr/locel/bin export MINIO_ROOT_USER=minio-admin export MINIO_ROOT_PASSWORD=minio-admin export MINIO_KMS_SECRET_KEY=secery-key:bXltaW5pb2VuY3J5cHRpb25rZXlj.

weixin_36013896的博客 1348

minio简单使用

例如:随着业务场景的不断发展,OSS存储选择使用minio,但大多是在.net core环境对它的使用,本文就介绍了framwork 4. 7.2环境下对minio的简单实用。提示:以下是本篇文章正文内容,下面案例可供参考例如:以上就是今天要讲的内容,本文仅仅简单介绍了minio的使用,而minio提供了大量能使我们快速便捷地处理文件的函数和方法。

sweethard2016的博客 330

Github标星28K+!这款可视化的对象存储服务真香!

在我们平时做项目的时候,文件存储是个很常见的需求。这时候我们就会用到对象存储服务,平时我们可能会选择OSS、AWS S3这类第三方服务。今天带大家搭建一款自己的对象存储服务,带可视化管理,用起来也挺简单!MinIO 是一款基于Go语言的高性能对象存储服务,在Github上已有28K+Star。它采用了Apache License v2.0开源协议,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。 下载完成后使用如下命令运行MinIO服务,注意使用指定MinIO

weixin_42907150的博客 1155
下一篇: MinIO下载并IIS配置
Jake-Code
博客等级 码龄7年 7粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值