diff --git a/README.md b/README.md
index dc028cd5..77a468af 100644
--- a/README.md
+++ b/README.md
@@ -49,164 +49,14 @@ Learn what [others saying about Iris](https://iris-go.com/testimonials/) and **[
## 📖 Learning Iris
```sh
-# https://github.com/kataras/iris/wiki/Installation
$ go get github.com/kataras/iris/v12@master
$ go get github.com/iris-contrib/middleware@master
$ go get github.com/iris-contrib/swagger@master
-# assume the following code in main.go file
-$ cat main.go
```
-```go
-package main
+Iris contains extensive and thorough **[documentation](https://iris-go.com/docs)** making it easy to get started with the framework.
-import "github.com/kataras/iris/v12"
-
-func main() {
- app := iris.New()
-
- booksAPI := app.Party("/books")
- {
- booksAPI.Use(iris.Compression)
-
- // GET: http://localhost:8080/books
- booksAPI.Get("/", list)
- // POST: http://localhost:8080/books
- booksAPI.Post("/", create)
- }
-
- app.Listen(":8080")
-}
-
-// Book example.
-type Book struct {
- Title string `json:"title"`
-}
-
-func list(ctx iris.Context) {
- books := []Book{
- {"Mastering Concurrency in Go"},
- {"Go Design Patterns"},
- {"Black Hat Go"},
- }
-
- ctx.JSON(books)
- // TIP: negotiate the response between server's prioritizes
- // and client's requirements, instead of ctx.JSON:
- // ctx.Negotiation().JSON().MsgPack().Protobuf()
- // ctx.Negotiate(books)
-}
-
-func create(ctx iris.Context) {
- var b Book
- err := ctx.ReadJSON(&b)
- // TIP: use ctx.ReadBody(&b) to bind
- // any type of incoming data instead.
- if err != nil {
- ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem().
- Title("Book creation failure").DetailErr(err))
- // TIP: use ctx.StopWithError(code, err) when only
- // plain text responses are expected on errors.
- return
- }
-
- println("Received Book: " + b.Title)
-
- ctx.StatusCode(iris.StatusCreated)
-}
-```
-
-**MVC** equivalent:
-
-```go
-import "github.com/kataras/iris/v12/mvc"
-```
-
-```go
-m := mvc.New(booksAPI)
-m.Handle(new(BookController))
-```
-
-```go
-type BookController struct {
- /* dependencies */
-}
-
-// GET: http://localhost:8080/books
-func (c *BookController) Get() []Book {
- return []Book{
- {"Mastering Concurrency in Go"},
- {"Go Design Patterns"},
- {"Black Hat Go"},
- }
-}
-
-// POST: http://localhost:8080/books
-func (c *BookController) Post(b Book) int {
- println("Received Book: " + b.Title)
-
- return iris.StatusCreated
-}
-```
-
-**Run** your Iris web server:
-
-```sh
-$ go run main.go
-> Now listening on: http://localhost:8080
-> Application started. Press CTRL+C to shut down.
-```
-
-**List** Books:
-
-```sh
-$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books
-
-[
- {
- "title": "Mastering Concurrency in Go"
- },
- {
- "title": "Go Design Patterns"
- },
- {
- "title": "Black Hat Go"
- }
-]
-```
-
-**Create** a new Book:
-
-```sh
-$ curl -i -X POST \
---header 'Content-Encoding:gzip' \
---header 'Content-Type:application/json' \
---data "{\"title\":\"Writing An Interpreter In Go\"}" \
-http://localhost:8080/books
-
-> HTTP/1.1 201 Created
-```
-
-That's how an **error** response looks like:
-
-```sh
-$ curl -X POST --data "{\"title\" \"not valid one\"}" \
-http://localhost:8080/books
-
-> HTTP/1.1 400 Bad Request
-
-{
- "status": 400,
- "title": "Book creation failure"
- "detail": "invalid character '\"' after object key",
-}
-```
-
-
-
-[![run in the browser](https://img.shields.io/badge/Run-in%20the%20Browser-348798.svg?style=for-the-badge&logo=repl.it)](https://bit.ly/2YJeSZe)
-
-Iris contains extensive and thorough **[wiki](https://github.com/kataras/iris/wiki)** making it easy to get started with the framework.
+
diff --git a/_examples/file-server/upload-file/main.go b/_examples/file-server/upload-file/main.go
index 0d34dc16..ef4a4807 100644
--- a/_examples/file-server/upload-file/main.go
+++ b/_examples/file-server/upload-file/main.go
@@ -4,7 +4,7 @@ import (
"crypto/md5"
"fmt"
"io"
- "os"
+ "path/filepath"
"strconv"
"time"
@@ -99,28 +99,20 @@ func main() {
// Handle the post request from the upload_form.html to the server
app.Post("/upload", iris.LimitRequestBodySize(maxSize+1<<20), func(ctx iris.Context) {
// Get the file from the request.
- file, info, err := ctx.FormFile("uploadfile")
+ f, fh, err := ctx.FormFile("uploadfile")
if err != nil {
ctx.StatusCode(iris.StatusInternalServerError)
ctx.HTML("Error while uploading: " + err.Error() + "")
return
}
+ defer f.Close()
- defer file.Close()
- fname := info.Filename
-
- // Create a file with the same name
- // assuming that you have a folder named 'uploads'
- out, err := os.OpenFile("./uploads/"+fname,
- os.O_WRONLY|os.O_CREATE, 0666)
+ _, err = ctx.SaveFormFile(fh, filepath.Join("./uploads", fh.Filename))
if err != nil {
ctx.StatusCode(iris.StatusInternalServerError)
ctx.HTML("Error while uploading: " + err.Error() + "")
return
}
- defer out.Close()
-
- io.Copy(out, file)
})
// start the server at http://localhost:8080 with post limit at 5 MB.