Golang веб сервер принять multipart/form-data

410
31 августа 2017, 17:33

Есть сервер на Golang в качестве http web framework использую gin

Код сервера

func main() { 
    router := gin.Default()
    router.Static("/", "./public")
    router.POST("/upload", func(c *gin.Context) {
        name := c.PostForm("name")
        email := c.PostForm("email")
        // Multipart form
        form, err := c.MultipartForm()
        if err != nil {
            c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error()))
            return
        }
        files := form.File["files"]

        for _, file := range files {
            if err := c.SaveUploadedFile(file, file.Filename); err != nil {
                c.String(http.StatusBadRequest, fmt.Sprintf("upload file err: %s", err.Error()))
                return
            }
        }
        c.String(http.StatusOK, fmt.Sprintf("Uploaded successfully %d files with fields name=%s and email=%s.", len(files), name, email))
    })
    router.Run(":8080")
}

html форма и ajax запрос на отправку данных.

</div>
  <form id="data" method="post" enctype="multipart/form-data">
      Name: <input type="text" name="name"><br>
      Email: <input type="email" name="email"><br>
      Files: <input type="file" name="files" multiple><br><br>
      <input type="submit" value="Submit">
  </form>
<script>
    //form Submit action
    $("form#data").submit(function(event){
        //disable the default form submission
        event.preventDefault();
        //grab all form data
        var formData = new FormData($(this)[0]);
        $.ajax({
            url: 'http://localhost:8080/upload',
            type: 'POST',
            data: formData,
            async: false,
            cache: false,
            contentType: false,
            processData: false,
            enctype: 'multipart/form-data',
            success: function (returndata) {
                alert(returndata);
            }
        });
        return false;
    });
  </script>

При отправке запрос выдает ошибку

Помогите пожалуйста разобраться.

Answer 1

Добавил на сервер:

c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")

Все заработало.

READ ALSO
Как вставить иконку в input

Как вставить иконку в input

Видела подобный вопрос, но ответ дали как вставить изображениеА что на счет иконки, например, с Font Awesome? Вот как здесь: http://bashooka

846
Как сделать массив со ссылками на enum?

Как сделать массив со ссылками на enum?

Привет всем! Есть массив к которому периодически обращаются извнеЭтот массив инициализируется 1 раз и больше его менять нельзя

306