diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Controllers/HomeController.cs b/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Controllers/HomeController.cs deleted file mode 100644 index af023534..00000000 --- a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Controllers/HomeController.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; -using MinIOAspNetMvcTest.Models; - -namespace MinIOAspNetMvcTest.Controllers -{ - public class HomeController : Controller - { - private readonly ILogger _logger; - - public HomeController(ILogger logger) - { - _logger = logger; - } - - public IActionResult Index() - { - return View(); - } - - public IActionResult Privacy() - { - return View(); - } - - [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] - public IActionResult Error() - { - return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier }); - } - } -} diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Home/Index.cshtml b/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Home/Index.cshtml deleted file mode 100644 index d2d19bdf..00000000 --- a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Home/Index.cshtml +++ /dev/null @@ -1,8 +0,0 @@ -@{ - ViewData["Title"] = "Home Page"; -} - -
-

Welcome

-

Learn about building Web apps with ASP.NET Core.

-
diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Shared/Error.cshtml b/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Shared/Error.cshtml deleted file mode 100644 index a1e04783..00000000 --- a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Shared/Error.cshtml +++ /dev/null @@ -1,25 +0,0 @@ -@model ErrorViewModel -@{ - ViewData["Title"] = "Error"; -} - -

Error.

-

An error occurred while processing your request.

- -@if (Model.ShowRequestId) -{ -

- Request ID: @Model.RequestId -

-} - -

Development Mode

-

- Swapping to Development environment will display more detailed information about the error that occurred. -

-

- The Development environment shouldn't be enabled for deployed applications. - It can result in displaying sensitive information from exceptions to end users. - For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development - and restarting the app. -

diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Shared/_Layout.cshtml b/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Shared/_Layout.cshtml deleted file mode 100644 index e3191386..00000000 --- a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Shared/_Layout.cshtml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - @ViewData["Title"] - MinIOAspNetMvcTest - - - - -
- -
-
-
- @RenderBody() -
-
- -
-
- © 2020 - MinIOAspNetMvcTest - Privacy -
-
- - - - @RenderSection("Scripts", required: false) - - diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Shared/_ValidationScriptsPartial.cshtml b/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Shared/_ValidationScriptsPartial.cshtml deleted file mode 100644 index 5a16d80a..00000000 --- a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Shared/_ValidationScriptsPartial.cshtml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/labs/MinIOTest/.gitignore b/labs/MinIOTest/.gitignore new file mode 100644 index 00000000..6320cd24 --- /dev/null +++ b/labs/MinIOTest/.gitignore @@ -0,0 +1 @@ +data \ No newline at end of file diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/.gitignore b/labs/MinIOTest/MinIOAspNetMvcTest/.gitignore similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/.gitignore rename to labs/MinIOTest/MinIOAspNetMvcTest/.gitignore diff --git a/labs/MinIOTest/MinIOAspNetMvcTest/Controllers/HomeController.cs b/labs/MinIOTest/MinIOAspNetMvcTest/Controllers/HomeController.cs new file mode 100644 index 00000000..bcd66b85 --- /dev/null +++ b/labs/MinIOTest/MinIOAspNetMvcTest/Controllers/HomeController.cs @@ -0,0 +1,79 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Minio; +using System; +using System.Globalization; +using System.IO; +using System.Security.Cryptography; + +namespace MinIOAspNetMvcTest.Controllers +{ + public class HomeController : Controller + { + private readonly ILogger _logger; + private readonly IConfiguration _cfg; + + public HomeController(ILogger logger, IConfiguration cfg) + { + _logger = logger; + this._cfg = cfg; + } + + public IActionResult Index() + { + return View(); + } + + [HttpPost] + public IActionResult Upload() + { + if (Request.Form.Files != null && Request.Form.Files.Count > 0) + { + var file = Request.Form.Files[0]; + using Stream stream = file.OpenReadStream(); + var ext = GetExtension(file.FileName); + var md5 = GetFileNameHash(stream); + var name = $"{md5}.{ext}"; + var endpoint = this._cfg["minio:endpoint"];//"play.min.io"; + var accessKey = this._cfg["minio:accessKey"]; //"Q3AM3UQ867SPQQA43P2F"; + var secretKey = this._cfg["minio:secretKey"]; //"zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"; + var bucketName = "upload"; + try + { + var minio = new MinioClient(endpoint, accessKey, secretKey);//.WithSSL(); + bool found = minio.BucketExistsAsync(bucketName).Result; + if (found) + { + minio.PutObjectAsync(bucketName, name, stream, stream.Length); + var path = $"/upload/{name}"; + return Json(new { error = 0, url = path }); + } + else + { + //minio.MakeBucketAsync(bucketName); + return Json(new { error = 2, msg = $"can not found bucket {bucketName}" }); + } + } + catch (Exception ex) + { + this._logger.LogError(ex.ToString()); + return Json(new { error = 3, msg = ex.Message }); + } + } + return Json(new { error = 1, msg = "未选中文件" }); + } + + private static string GetExtension(string value) + { + return value.Substring(value.LastIndexOf('.') + 1).ToLower(CultureInfo.CurrentCulture); + } + + private static string GetFileNameHash(Stream input) + { + using var hashAlg = SHA256.Create(); + byte[] hash = hashAlg.ComputeHash(input); + return BitConverter.ToString(hash).Replace("-", string.Empty, true, CultureInfo.CurrentCulture).ToLower(CultureInfo.CurrentCulture); + } + } +} \ No newline at end of file diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/MinIOAspNetMvcTest.csproj b/labs/MinIOTest/MinIOAspNetMvcTest/MinIOAspNetMvcTest.csproj similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/MinIOAspNetMvcTest.csproj rename to labs/MinIOTest/MinIOAspNetMvcTest/MinIOAspNetMvcTest.csproj diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/MinIOAspNetMvcTest.sln b/labs/MinIOTest/MinIOAspNetMvcTest/MinIOAspNetMvcTest.sln similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/MinIOAspNetMvcTest.sln rename to labs/MinIOTest/MinIOAspNetMvcTest/MinIOAspNetMvcTest.sln diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Models/ErrorViewModel.cs b/labs/MinIOTest/MinIOAspNetMvcTest/Models/ErrorViewModel.cs similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Models/ErrorViewModel.cs rename to labs/MinIOTest/MinIOAspNetMvcTest/Models/ErrorViewModel.cs diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Program.cs b/labs/MinIOTest/MinIOAspNetMvcTest/Program.cs similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Program.cs rename to labs/MinIOTest/MinIOAspNetMvcTest/Program.cs diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Properties/launchSettings.json b/labs/MinIOTest/MinIOAspNetMvcTest/Properties/launchSettings.json similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Properties/launchSettings.json rename to labs/MinIOTest/MinIOAspNetMvcTest/Properties/launchSettings.json diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Startup.cs b/labs/MinIOTest/MinIOAspNetMvcTest/Startup.cs similarity index 70% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Startup.cs rename to labs/MinIOTest/MinIOAspNetMvcTest/Startup.cs index 611088e8..270ec382 100644 --- a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Startup.cs +++ b/labs/MinIOTest/MinIOAspNetMvcTest/Startup.cs @@ -1,12 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http.Features; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; +using System.Text.Encodings.Web; +using System.Text.Unicode; namespace MinIOAspNetMvcTest { @@ -19,13 +18,19 @@ namespace MinIOAspNetMvcTest public IConfiguration Configuration { get; } - // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - services.AddControllersWithViews(); + services.Configure(o => + { + o.ValueLengthLimit = 1024 * 1024; + o.MultipartBodyLengthLimit = 1024 * 1024 * 1024; + }); + services.AddControllersWithViews().AddJsonOptions(options => + { + options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); + }); } - // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) @@ -50,4 +55,4 @@ namespace MinIOAspNetMvcTest }); } } -} +} \ No newline at end of file diff --git a/labs/MinIOTest/MinIOAspNetMvcTest/Views/Home/Index.cshtml b/labs/MinIOTest/MinIOAspNetMvcTest/Views/Home/Index.cshtml new file mode 100644 index 00000000..9be105e2 --- /dev/null +++ b/labs/MinIOTest/MinIOAspNetMvcTest/Views/Home/Index.cshtml @@ -0,0 +1,14 @@ + + + + + + MinIOAspNetMvcTest + + +
+ + +
+ + \ No newline at end of file diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Home/Privacy.cshtml b/labs/MinIOTest/MinIOAspNetMvcTest/Views/Home/Privacy.cshtml similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/Home/Privacy.cshtml rename to labs/MinIOTest/MinIOAspNetMvcTest/Views/Home/Privacy.cshtml diff --git a/labs/MinIOTest/MinIOAspNetMvcTest/Views/Shared/_Layout.cshtml b/labs/MinIOTest/MinIOAspNetMvcTest/Views/Shared/_Layout.cshtml new file mode 100644 index 00000000..1137a596 --- /dev/null +++ b/labs/MinIOTest/MinIOAspNetMvcTest/Views/Shared/_Layout.cshtml @@ -0,0 +1,15 @@ + + + + + + @ViewData["Title"] - MinIOAspNetMvcTest + + +
+
+ @RenderBody() +
+
+ + \ No newline at end of file diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/_ViewImports.cshtml b/labs/MinIOTest/MinIOAspNetMvcTest/Views/_ViewImports.cshtml similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/_ViewImports.cshtml rename to labs/MinIOTest/MinIOAspNetMvcTest/Views/_ViewImports.cshtml diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/_ViewStart.cshtml b/labs/MinIOTest/MinIOAspNetMvcTest/Views/_ViewStart.cshtml similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/Views/_ViewStart.cshtml rename to labs/MinIOTest/MinIOAspNetMvcTest/Views/_ViewStart.cshtml diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/appsettings.Development.json b/labs/MinIOTest/MinIOAspNetMvcTest/appsettings.Development.json similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/appsettings.Development.json rename to labs/MinIOTest/MinIOAspNetMvcTest/appsettings.Development.json diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/appsettings.json b/labs/MinIOTest/MinIOAspNetMvcTest/appsettings.json similarity index 55% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/appsettings.json rename to labs/MinIOTest/MinIOAspNetMvcTest/appsettings.json index 7f018f27..8c0eb5b2 100644 --- a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/appsettings.json +++ b/labs/MinIOTest/MinIOAspNetMvcTest/appsettings.json @@ -7,5 +7,10 @@ } }, "AllowedHosts": "*", - "server.urls":"http://*:5050" -} + "server.urls": "http://*:5050", + "minio": { + "endpoint": "127.0.0.1:9000", + "accessKey": "12345678", + "secretKey": "12345678" + } +} \ No newline at end of file diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/wwwroot/css/site.css b/labs/MinIOTest/MinIOAspNetMvcTest/wwwroot/css/site.css similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/wwwroot/css/site.css rename to labs/MinIOTest/MinIOAspNetMvcTest/wwwroot/css/site.css diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/wwwroot/favicon.ico b/labs/MinIOTest/MinIOAspNetMvcTest/wwwroot/favicon.ico similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/wwwroot/favicon.ico rename to labs/MinIOTest/MinIOAspNetMvcTest/wwwroot/favicon.ico diff --git a/labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/wwwroot/js/site.js b/labs/MinIOTest/MinIOAspNetMvcTest/wwwroot/js/site.js similarity index 100% rename from labs/MinIOAspNetMvcTest/MinIOAspNetMvcTest/wwwroot/js/site.js rename to labs/MinIOTest/MinIOAspNetMvcTest/wwwroot/js/site.js diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/.gitignore b/labs/MinIOTest/MinIOSpringBootRestTest/.gitignore new file mode 100644 index 00000000..0d82a354 --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/.gitignore @@ -0,0 +1,30 @@ +# Operating System Files + +*.DS_Store +Thumbs.db + +# Build Files # + +bin +target +build/ +.gradle + +# Eclipse Project Files # + +.classpath +.project +.settings + +# IntelliJ IDEA Files # + +*.iml +*.ipr +*.iws +*.idea + +# Spring Bootstrap artifacts + +dependency-reduced-pom.xml +out +README.html \ No newline at end of file diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/build.gradle b/labs/MinIOTest/MinIOSpringBootRestTest/build.gradle new file mode 100644 index 00000000..4b7d8001 --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/build.gradle @@ -0,0 +1,27 @@ +//https://spring.io/guides/gs/spring-boot/ +plugins { + id 'org.springframework.boot' version '2.2.2.RELEASE' + id 'io.spring.dependency-management' version '1.0.8.RELEASE' + id 'java' +} + +group 'org.nbaxp.demo' +version '1.0-SNAPSHOT' +sourceCompatibility = '1.8' + +repositories { + maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'} + //mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'io.minio:minio:3.0.10' + testImplementation('org.springframework.boot:spring-boot-starter-test') { + exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' + } +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/gradle/wrapper/gradle-wrapper.jar b/labs/MinIOTest/MinIOSpringBootRestTest/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..f3d88b1c Binary files /dev/null and b/labs/MinIOTest/MinIOSpringBootRestTest/gradle/wrapper/gradle-wrapper.jar differ diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/gradle/wrapper/gradle-wrapper.properties b/labs/MinIOTest/MinIOSpringBootRestTest/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..8774bca7 --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Wed May 06 11:22:18 CST 2020 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1-all.zip +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/gradlew b/labs/MinIOTest/MinIOSpringBootRestTest/gradlew new file mode 100644 index 00000000..2fe81a7d --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/gradlew @@ -0,0 +1,183 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/gradlew.bat b/labs/MinIOTest/MinIOSpringBootRestTest/gradlew.bat new file mode 100644 index 00000000..9618d8d9 --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/gradlew.bat @@ -0,0 +1,100 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windows variants + +if not "%OS%" == "Windows_NT" goto win9xME_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/settings.gradle b/labs/MinIOTest/MinIOSpringBootRestTest/settings.gradle new file mode 100644 index 00000000..31fcf6ce --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'MinIOSpringBootRestTest' + diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/src/main/java/com/nbaxpMinIOSpringBootRestTest/Application.java b/labs/MinIOTest/MinIOSpringBootRestTest/src/main/java/com/nbaxpMinIOSpringBootRestTest/Application.java new file mode 100644 index 00000000..f5a553d0 --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/src/main/java/com/nbaxpMinIOSpringBootRestTest/Application.java @@ -0,0 +1,14 @@ +package com.nbaxpMinIOSpringBootRestTest; + + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/src/main/java/com/nbaxpMinIOSpringBootRestTest/FileUploadResult.java b/labs/MinIOTest/MinIOSpringBootRestTest/src/main/java/com/nbaxpMinIOSpringBootRestTest/FileUploadResult.java new file mode 100644 index 00000000..09d13e76 --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/src/main/java/com/nbaxpMinIOSpringBootRestTest/FileUploadResult.java @@ -0,0 +1,37 @@ +package com.nbaxpMinIOSpringBootRestTest; + +public class FileUploadResult { + public FileUploadResult(int code, String msg, String url) { + this.code = code; + this.msg = msg; + this.url = url; + } + + private int code; + private String msg; + private String url; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } +} diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/src/main/java/com/nbaxpMinIOSpringBootRestTest/HomeController.java b/labs/MinIOTest/MinIOSpringBootRestTest/src/main/java/com/nbaxpMinIOSpringBootRestTest/HomeController.java new file mode 100644 index 00000000..da9137fc --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/src/main/java/com/nbaxpMinIOSpringBootRestTest/HomeController.java @@ -0,0 +1,94 @@ +package com.nbaxpMinIOSpringBootRestTest; + +import io.minio.MinioClient; +import io.minio.errors.*; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; +import java.io.InputStream; +import java.math.BigInteger; +import java.security.InvalidKeyException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +@RestController +public class HomeController { + + private String endpoint; + private String accesskey; + private String secretKey; + + public HomeController(@Value("${minio.endpoint}")String endpoint, + @Value("${minio.accesskey}")String accesskey, + @Value("${minio.secretKey}")String secretKey) + { + this.endpoint=endpoint; + this.accesskey=accesskey; + this.secretKey=secretKey; + } + + @RequestMapping("/") + public String index() + { + return "index.html"; + } + + @RequestMapping("/Home/Upload") + public FileUploadResult upload(MultipartFile file) { + String bucketName="upload"; + String errMsg=""; + if(file==null||file.isEmpty()) + { + return new FileUploadResult(1,"not has file",null); + } + else { + try { + MinioClient minio = new MinioClient(this.endpoint, this.accesskey, this.secretKey); + Boolean found = minio.bucketExists(bucketName); + if (found) + { + byte[] bytes=file.getBytes(); + String ext = getExtension(file.getOriginalFilename()); + String md5 = getFileNameHash(bytes); + String name = String.format("%s.%s",md5,ext); + minio.putObject(bucketName, name,file.getInputStream(),bytes.length,file.getContentType()); + String path = String.format("/upload/%s",name); + return new FileUploadResult(0,errMsg,path); + } + else + { + //minio.MakeBucketAsync(bucketName); + return new FileUploadResult(3,String.format("can not found bucket %s",bucketName),null); + } + } catch (Exception e) { + e.printStackTrace(); + errMsg = e.getMessage(); + } + } + + + return new FileUploadResult(2,errMsg,null); + } + + + + private String getExtension(String value) { + return value.substring(value.lastIndexOf('.') + 1).toLowerCase(); + } + + private String getFileNameHash(byte[] uploadBytes) { + try { + MessageDigest md5 = MessageDigest.getInstance("MD5"); + byte[] digest = md5.digest(uploadBytes); + String hashString = new BigInteger(1, digest).toString(16); + return hashString; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/src/main/resources/application.properties b/labs/MinIOTest/MinIOSpringBootRestTest/src/main/resources/application.properties new file mode 100644 index 00000000..28e1fd8f --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/src/main/resources/application.properties @@ -0,0 +1,6 @@ +server.port=5050 +spring.servlet.multipart.maxFileSize = 100MB +spring.servlet.multipart.maxRequestSize=1000MB +minio.endpoint=http://127.0.0.1:9000 +minio.accessKey=12345678 +minio.secretKey=12345678 \ No newline at end of file diff --git a/labs/MinIOTest/MinIOSpringBootRestTest/src/main/resources/static/index.html b/labs/MinIOTest/MinIOSpringBootRestTest/src/main/resources/static/index.html new file mode 100644 index 00000000..652cb2af --- /dev/null +++ b/labs/MinIOTest/MinIOSpringBootRestTest/src/main/resources/static/index.html @@ -0,0 +1,14 @@ + + + + + + MinIOAspNetMvcTest + + +
+ + +
+ + \ No newline at end of file diff --git a/labs/MinIOTest/README.md b/labs/MinIOTest/README.md new file mode 100644 index 00000000..b2f448af --- /dev/null +++ b/labs/MinIOTest/README.md @@ -0,0 +1,36 @@ +# MinIO 测试 + +MinIO 中文文档地址:https://docs.min.io/cn/ + +## 启动 + +windows + +``` +set MINIO_ACCESS_KEY=12345678 +set MINIO_SECRET_KEY=12345678 +minio server ./data +``` + +linux + +··· +chmod +x minio +./minio server /data +··· + +## Web浏览器 + + +http://localhost:9000 minioadmin minioadmin + +创建存储桶并添加Policy设置:*:Read and Write + +## 客户端访问 + +ACCESS_KEY可以通过环境变量MINIO_ACCESS_KEY设置 +SECRET_KEY可以通过环境变量MINIO_SECRET_KEY设置 + +## 分布式访问 + +使用nginx进行多个地址的负载均衡 diff --git a/labs/MinIOTest/minio.exe b/labs/MinIOTest/minio.exe new file mode 100644 index 00000000..6513257b Binary files /dev/null and b/labs/MinIOTest/minio.exe differ