From c25861a4e957714efc8a7f57c1adaf0a702d84b9 Mon Sep 17 00:00:00 2001 From: EvaPeng Date: Sun, 20 Dec 2020 13:19:55 +0800 Subject: [PATCH] edit upload backend --- frontend/src/api/files.js | 23 +++++--- http/resource.go | 108 +++++++++++++++++++++++++++++--------- logs/2020-12-17.log | 69 ------------------------ logs/2020-12-18.log | 59 --------------------- test/new.md | 0 5 files changed, 101 insertions(+), 158 deletions(-) delete mode 100755 logs/2020-12-17.log delete mode 100755 logs/2020-12-18.log delete mode 100755 test/new.md diff --git a/frontend/src/api/files.js b/frontend/src/api/files.js index 3c1a3bcc..953740d7 100644 --- a/frontend/src/api/files.js +++ b/frontend/src/api/files.js @@ -3,7 +3,7 @@ import { md5Generate } from '../../src/utils/md5' import { baseURL } from '@/utils/constants' import store from '@/store' - /* eslint-disable no-debugger */ +/* eslint-disable no-debugger */ export async function fetch(url) { url = removePrefix(url) @@ -122,7 +122,7 @@ export async function post(url, content = '', overwrite = false, onupload) { if (!content) { //create folder or create new file - await partialUpload(url, "", content); + await partialUpload(url, "", content) return; } @@ -134,9 +134,9 @@ export async function post(url, content = '', overwrite = false, onupload) { let totalChunks = Math.ceil(fileSize / chunkSize);//get total chunck pieces let fileID = await md5Generate(content); let allContent = bufferContent || content; - //totalChunks = 1; + let tryCount = 0; + let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice for (let index = 0; index < totalChunks; index++) { - debugger; let fileContent = null; let startIndex, endInex; if (index < totalChunks - 1) { @@ -146,9 +146,20 @@ export async function post(url, content = '', overwrite = false, onupload) { startIndex = index * chunkSize; endInex = fileSize; } - fileContent = allContent.slice(startIndex, endInex); + fileContent = blobSlice.call(allContent, startIndex, endInex); + + debugger; let params = `&fileID=${fileID}&chunckIndex=${index + 1}&totalChunck=${totalChunks}` - await partialUpload(url, params, fileContent); + await partialUpload(url, params, fileContent).catch(err => { + debugger; + if (tryCount <= 2) {//one file try three times + index--; + tryCount++; + } else { + throw err; + } + }); + tryCount = 0; } } diff --git a/http/resource.go b/http/resource.go index e7e070fe..8386893b 100644 --- a/http/resource.go +++ b/http/resource.go @@ -9,6 +9,7 @@ import ( "os" "path" "path/filepath" + "strconv" "strings" "github.com/spf13/afero" @@ -123,40 +124,99 @@ var resourcePostPutHandler = withUser(func(w http.ResponseWriter, r *http.Reques } err := d.RunHook(func() error { - dir, _ := path.Split(r.URL.Path) - err := d.user.Fs.MkdirAll(dir, 0775) - if err != nil { - return err + filePath := r.URL.Path + dir, fileName := path.Split(filePath) + urlQuery := r.URL.Query() + fileID := urlQuery.Get("fileID") + chunckIndex := urlQuery.Get("chunckIndex") + totalChunck := urlQuery.Get("totalChunck") + isPieceUpload := totalChunck != "1" + isPieceHasUpload := false + if isPieceUpload { + tempDir := "tempDir_" + fileID + "/" + dir += tempDir + spieceFileName := chunckIndex + "_" + fileName //spiece file name + filePath = dir + spieceFileName + if totalChunck != chunckIndex { + _, err := d.user.Fs.Stat(filePath) + if err != nil { + //the piece has exist + isPieceHasUpload = true + } + } } - u, err := url.Parse(r.URL.RequestURI()) - fmt.Println(u) - if err != nil { - panic(err) - } - file, err := d.user.Fs.OpenFile(r.URL.Path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0775) - if err != nil { - return err - } - defer file.Close() + var file afero.File + if isPieceHasUpload == false { + err := d.user.Fs.MkdirAll(dir, 0775) + if err != nil { + return err + } - _, err = io.Copy(file, r.Body) - if err != nil { - return err + file, err := d.user.Fs.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0775) + if err != nil { + return err + } + defer file.Close() + + _, err = io.Copy(file, r.Body) + if err != nil { + if isPieceUpload { + d.user.Fs.Remove(filePath) + } + return err + } } - // Gets the info about the file. - info, err := file.Stat() - if err != nil { - return err + //all Chunck Uploaded + totalChunckInt, _ := strconv.Atoi(totalChunck) + if chunckIndex == totalChunck && totalChunckInt > 1 { + //merge all spiece files + itemPath := "" + //create original file + file, _err := d.user.Fs.OpenFile(r.URL.Path, os.O_CREATE|os.O_APPEND|os.O_RDWR, 0777) + if _err != nil { + return _err + } + defer file.Close() + + for i := 1; i <= totalChunckInt; i++ { + piecefileName := strconv.Itoa(i) + "_" + fileName + itemPath = dir + piecefileName + spieceFile, err := d.user.Fs.Open(itemPath) + if err != nil { + return err + } + contents, err := ioutil.ReadAll(spieceFile) + if err != nil { + return err + } + file.Write(contents) + } + + //deltet temp folder + d.user.Fs.RemoveAll(dir) } - etag := fmt.Sprintf(`"%x%x"`, info.ModTime().UnixNano(), info.Size()) - w.Header().Set("ETag", etag) + if (chunckIndex == totalChunck && totalChunckInt > 1) || totalChunckInt == 1 { + // Gets the info about the file. + info, err := file.Stat() + if err != nil { + return err + } + etag := fmt.Sprintf(`"%x%x"`, info.ModTime().UnixNano(), info.Size()) + w.Header().Set("ETag", etag) + } return nil }, action, r.URL.Path, "", d.user) if err != nil { - _ = d.user.Fs.RemoveAll(r.URL.Path) + urlQuery := r.URL.Query() + totalChunck := urlQuery.Get("totalChunck") + + //spiece upload can retry + if totalChunck == "1" { + _ = d.user.Fs.RemoveAll(r.URL.Path) + } } return errToStatus(err), err diff --git a/logs/2020-12-17.log b/logs/2020-12-17.log deleted file mode 100755 index 824a1684..00000000 --- a/logs/2020-12-17.log +++ /dev/null @@ -1,69 +0,0 @@ -2020-12-17 15:36:38.9919|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/index.html -2020-12-17 15:36:39.2215|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 232.3995ms 200 text/html -2020-12-17 15:36:39.4287|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/v2/swagger.json -2020-12-17 15:36:41.7248|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 2296.1272ms 200 application/json;charset=utf-8 -2020-12-17 15:37:43.9033|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/index.html -2020-12-17 15:37:44.0489|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 148.1349ms 200 text/html -2020-12-17 15:37:44.1570|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/v2/swagger.json -2020-12-17 15:37:46.3277|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 2170.6965ms 200 application/json;charset=utf-8 -2020-12-17 17:50:38.3509|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/index.html -2020-12-17 17:50:38.5127|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 164.2284ms 200 text/html -2020-12-17 17:50:38.6389|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/v2/swagger.json -2020-12-17 17:50:38.8269|Imagine.WebAPI.Middlewares.ErrorHandlingMiddleware|ERROR|The following errors occurred with attribute routing information: - -Error 1: -Attribute routes with the same name '导入维护数据' must have the same template: -Action: 'Imagine.WebAPI.Controllers.v2.AgreementDataReport.SuperviseController.ImportRecord (Imagine.WebAPI)' - Template: 'api/v2/AgreementDataReport/supervise/import' -Action: 'Imagine.WebAPI.Controllers.v2.AgreementDataReport.TrainerController.ImportRecord (Imagine.WebAPI)' - Template: 'api/v2/AgreementDataReport/trainer/import' at Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorBuilder.Build(ApplicationModel application) - at Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorProvider.GetDescriptors() - at Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorProvider.OnProvidersExecuting(ActionDescriptorProviderContext context) - at Microsoft.AspNetCore.Mvc.Internal.ActionDescriptorCollectionProvider.UpdateCollection() - at Microsoft.AspNetCore.Mvc.Internal.ActionDescriptorCollectionProvider.get_ActionDescriptors() - at Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollectionProvider.get_ApiDescriptionGroups() - at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath, String[] schemes) - at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext) - at Imagine.WebAPI.Middlewares.ErrorHandlingMiddleware.Invoke(HttpContext context, LogRecordServices logRecordServices) in C:\WorkSpace\ERP\Web\Imagine.WebAPI\Middlewares\ErrorHandlingMiddleware.cs:line 38 -2020-12-17 17:50:38.8269|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 197.5292ms 500 application/json -2020-12-17 17:50:43.5638|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/swagger-ui-bundle.js.map -2020-12-17 17:50:43.5638|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/swagger-ui-standalone-preset.js.map -2020-12-17 17:50:43.5638|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/swagger-ui.css.map -2020-12-17 17:50:43.5974|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui.css.map'. Physical path: 'N/A' -2020-12-17 17:50:43.5974|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 33.0553ms 200 text/plain -2020-12-17 17:50:43.6468|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui-standalone-preset.js.map'. Physical path: 'N/A' -2020-12-17 17:50:43.6777|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 113.7774ms 200 text/plain -2020-12-17 17:50:43.6963|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui-bundle.js.map'. Physical path: 'N/A' -2020-12-17 17:50:43.7193|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 155.5366ms 200 text/plain -2020-12-17 17:50:44.5492|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/index.html -2020-12-17 17:50:44.5492|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 0.6966ms 200 text/html -2020-12-17 17:50:44.6955|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/swagger-ui-bundle.js.map -2020-12-17 17:50:44.6955|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/swagger-ui.css.map -2020-12-17 17:50:44.6955|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/swagger-ui-standalone-preset.js.map -2020-12-17 17:50:44.6955|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui.css.map'. Physical path: 'N/A' -2020-12-17 17:50:44.6955|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 1.1869ms 200 text/plain -2020-12-17 17:50:44.6955|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui-standalone-preset.js.map'. Physical path: 'N/A' -2020-12-17 17:50:44.7043|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui-bundle.js.map'. Physical path: 'N/A' -2020-12-17 17:50:44.7043|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 7.9223ms 200 text/plain -2020-12-17 17:50:44.7449|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/v2/swagger.json -2020-12-17 17:50:44.7567|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/favicon-32x32.png -2020-12-17 17:50:44.7567|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/favicon-32x32.png'. Physical path: 'N/A' -2020-12-17 17:50:44.7567|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 2.2996ms 200 image/png -2020-12-17 17:50:44.7567|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 64.6675ms 200 text/plain -2020-12-17 17:50:44.8547|Imagine.WebAPI.Middlewares.ErrorHandlingMiddleware|ERROR|The following errors occurred with attribute routing information: - -Error 1: -Attribute routes with the same name '导入维护数据' must have the same template: -Action: 'Imagine.WebAPI.Controllers.v2.AgreementDataReport.SuperviseController.ImportRecord (Imagine.WebAPI)' - Template: 'api/v2/AgreementDataReport/supervise/import' -Action: 'Imagine.WebAPI.Controllers.v2.AgreementDataReport.TrainerController.ImportRecord (Imagine.WebAPI)' - Template: 'api/v2/AgreementDataReport/trainer/import' at Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorBuilder.Build(ApplicationModel application) - at Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorProvider.GetDescriptors() - at Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorProvider.OnProvidersExecuting(ActionDescriptorProviderContext context) - at Microsoft.AspNetCore.Mvc.Internal.ActionDescriptorCollectionProvider.UpdateCollection() - at Microsoft.AspNetCore.Mvc.Internal.ActionDescriptorCollectionProvider.get_ActionDescriptors() - at Microsoft.AspNetCore.Mvc.ApiExplorer.ApiDescriptionGroupCollectionProvider.get_ApiDescriptionGroups() - at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath, String[] schemes) - at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext) - at Imagine.WebAPI.Middlewares.ErrorHandlingMiddleware.Invoke(HttpContext context, LogRecordServices logRecordServices) in C:\WorkSpace\ERP\Web\Imagine.WebAPI\Middlewares\ErrorHandlingMiddleware.cs:line 38 -2020-12-17 17:50:44.8547|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 110.7455ms 500 application/json -2020-12-17 17:51:31.7252|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/index.html -2020-12-17 17:51:31.8726|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 150.0688ms 200 text/html -2020-12-17 17:51:32.0176|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/v2/swagger.json -2020-12-17 17:51:34.2256|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 2208.0491ms 200 application/json;charset=utf-8 diff --git a/logs/2020-12-18.log b/logs/2020-12-18.log deleted file mode 100755 index 87acbb9e..00000000 --- a/logs/2020-12-18.log +++ /dev/null @@ -1,59 +0,0 @@ -2020-12-18 09:37:01.6228|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/index.html -2020-12-18 09:37:01.7837|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 163.6062ms 200 text/html -2020-12-18 09:37:01.9117|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50828/swagger/v2/swagger.json -2020-12-18 09:37:04.0405|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 2128.7722ms 200 application/json;charset=utf-8 -2020-12-18 09:42:48.7388|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/ -2020-12-18 09:42:48.8877|IdentityServer4.AccessTokenValidation.IdentityServerAuthenticationHandler|DEBUG|AuthenticationScheme: Bearer was not authenticated. -2020-12-18 09:42:49.1034|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 367.2512ms 404 -2020-12-18 09:42:58.2628|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/index.html -2020-12-18 09:42:58.2735|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 10.6388ms 200 text/html -2020-12-18 09:42:58.2919|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/swagger-ui.css -2020-12-18 09:42:58.2919|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/swagger-ui-bundle.js -2020-12-18 09:42:58.2919|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/swagger-ui-standalone-preset.js -2020-12-18 09:42:58.3459|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui.css'. Physical path: 'N/A' -2020-12-18 09:42:58.3591|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui-standalone-preset.js'. Physical path: 'N/A' -2020-12-18 09:42:58.3591|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 72.4985ms 200 text/css -2020-12-18 09:42:58.3591|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 70.3671ms 200 application/javascript -2020-12-18 09:42:58.3755|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui-bundle.js'. Physical path: 'N/A' -2020-12-18 09:42:58.3755|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 94.0118ms 200 application/javascript -2020-12-18 09:42:58.5457|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/v2/swagger.json -2020-12-18 09:42:58.5457|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/favicon-32x32.png -2020-12-18 09:42:58.5457|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/favicon-32x32.png'. Physical path: 'N/A' -2020-12-18 09:42:58.5457|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 2.1855ms 200 image/png -2020-12-18 09:43:00.5989|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 2053.1754ms 200 application/json;charset=utf-8 -2020-12-18 09:47:13.3514|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/index.html -2020-12-18 09:47:13.3514|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 0.7838ms 200 text/html -2020-12-18 09:47:13.3837|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/swagger-ui.css -2020-12-18 09:47:13.3837|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui.css'. Physical path: 'N/A' -2020-12-18 09:47:13.3837|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/swagger-ui-bundle.js -2020-12-18 09:47:13.3837|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/swagger-ui-standalone-preset.js -2020-12-18 09:47:13.3837|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui-standalone-preset.js'. Physical path: 'N/A' -2020-12-18 09:47:13.3837|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 2.225ms 200 text/css -2020-12-18 09:47:13.3837|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui-bundle.js'. Physical path: 'N/A' -2020-12-18 09:47:13.3922|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 6.5196ms 200 application/javascript -2020-12-18 09:47:13.4344|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 48.6898ms 200 application/javascript -2020-12-18 09:47:13.5931|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/v2/swagger.json -2020-12-18 09:47:13.6227|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/favicon-32x32.png -2020-12-18 09:47:13.6234|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/favicon-32x32.png'. Physical path: 'N/A' -2020-12-18 09:47:13.6234|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 1.1855ms 200 image/png -2020-12-18 09:47:15.1937|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 1600.5697ms 200 application/json;charset=utf-8 -2020-12-18 09:49:01.2058|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/index.html -2020-12-18 09:49:01.2058|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 3.1039ms 200 text/html -2020-12-18 09:49:01.2603|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/swagger-ui.css -2020-12-18 09:49:01.2603|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui.css'. Physical path: 'N/A' -2020-12-18 09:49:01.2603|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/swagger-ui-bundle.js -2020-12-18 09:49:01.2603|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/swagger-ui-standalone-preset.js -2020-12-18 09:49:01.2603|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 1.8131ms 200 text/css -2020-12-18 09:49:01.2603|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui-standalone-preset.js'. Physical path: 'N/A' -2020-12-18 09:49:01.2603|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/swagger-ui-bundle.js'. Physical path: 'N/A' -2020-12-18 09:49:01.2603|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 2.3299ms 200 application/javascript -2020-12-18 09:49:01.2671|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 5.4942ms 200 application/javascript -2020-12-18 09:49:01.7611|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/v2/swagger.json -2020-12-18 09:49:01.7770|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/favicon-32x32.png -2020-12-18 09:49:01.7770|Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware|INFO|Sending file. Request path: '/favicon-32x32.png'. Physical path: 'N/A' -2020-12-18 09:49:01.7770|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 1.4089ms 200 image/png -2020-12-18 09:49:03.2900|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 1528.8876ms 200 application/json;charset=utf-8 -2020-12-18 09:49:12.4573|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/v1/swagger.json -2020-12-18 09:49:20.9748|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 8517.5243ms 200 application/json;charset=utf-8 -2020-12-18 09:49:35.3671|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request starting HTTP/1.1 GET http://localhost:50829/swagger/v2/swagger.json -2020-12-18 09:49:36.8593|Microsoft.AspNetCore.Hosting.Internal.WebHost|INFO|Request finished in 1492.191ms 200 application/json;charset=utf-8 diff --git a/test/new.md b/test/new.md deleted file mode 100755 index e69de29b..00000000