mrbardia72
mrbardia72
خواندن ۱ دقیقه·۴ سال پیش

Gin Web Framework part 3

Gin Web Framework part 3
Gin Web Framework part 3

درود دوستان امروز میخوام در مورد بخش سوم از سری مقالات فرم ورک Gin صحبت کنیم

فهرست بخش سوم از این مقاله

  • Multipart/Urlencoded Form
  • Map as querystring or postform parameters
  • Upload files (Single file)
  • Upload files (Multiple files)

میریم واسه توضیح هر بخش

قسمت اول Multipart/Urlencoded Form

router.POST(&quot/form_post&quot, func(c *gin.Context) { message := c.PostForm(&quotmessage&quot) nick := c.DefaultPostForm(&quotnick&quot, &quotanonymous&quot) })

فرض کنید یه فرم دارید به اسم مثلن form.html و یه تکست باکس به اسم message دارید و میخواید اطلاعات رو از این فرم بفرستید سمت سرور. خوب کافی هست از c.postform استفاده کنید که در خط شماره دو می باشد. اما واسه اختیاری کردن فیلد یعنی زمانی که فیلدی خالی بود یه متن یا چیزی توی فرم برای ما بفرست از دستور ی که در خط چهار هست استفاده می کنیم.

قسمت دوم Map as querystring or postform parameters

این شمای رو در نظر بگیرید

POST /post?ids[a]=1234&ids[b]=hello HTTP/1.1
Content-Type: application/x-www-form-urlencoded
names[first]=thinkerou&names[second]=tianou

کد زیر:

router.POST(&quot/post&quot, func(c *gin.Context) { ids := c.QueryMap(&quotids&quot) names := c.PostFormMap(&quotnames&quot) fmt.Printf(&quotids: %v; names: %v&quot, ids, names) })

خروجی مربوط به QueryMap در خط دوم

ids: map[b:hello a:1234]

خروجی مربوط به PostFormMap در خط سوم

names: map[second:tianou first:thinkerou]

خوب الان میخوام توضیح بدم در مورد کدها فوق

توی این روش تمام داده های که قرار ارسال بشه به صورت یک مپ درآمده و ارسال میشه که در خروجی های بالا مثلن names ما یک key داریم و یک value که در اینجا value های ما دادهای ارسالی ما هستن و داخل آکولاد اگر مشاهده کنبد کلید های ما هستن(شمای کلی رو نگاه کنید)

قسمت سوم Upload files Single file

آپلود فایل به صورت تکی

نمونه کد:

router.MaxMultipartMemory = 8 << 20 // 8 MiB router.POST(&quot/upload&quot, func(c *gin.Context) { file, _ := c.FormFile(&quotfile&quot) log.Println(file.Filename) var dst string = &quotdir/file/upload/ c.SaveUploadedFile(file, dst) })

برای آپلود فایل به صورت تکی از متدی که در خط سوم می باشد استفاده می کنیم. پارامتری که میگیره نام اون فرم آپلود می باشد. خوب توی خط اول ما سایز فایل رو مشخص کردیم و توی خط پنج آپلود عکس توی یه فلود ر خاص رو مشخص کردیم

تست با curl:

curl -X POST http://localhost:8080/upload \
-F "file=@/Users/appleboy/test.zip" \
-H "Content-Type: multipart/form-data"

قسمت چهارم Upload files Multiple file

آپلود فایل به صورت چندتایی

نمونه کد:

router.POST(&quot/upload&quot, func(c *gin.Context) { form, _ := c.MultipartForm() files := form.File[&quotupload[]&quot] for _, file := range files { c.SaveUploadedFile(file, dst) } })

برای آپلود فایل به صورت چندتایی از متدی که در خط دوم (MultipartForm) می باشد استفاده می کنیم. توی خط سوم پارامتری که میگیره نام اون فرم آپلود می باشد. که قرار چندتایی فایل آپلود بشه بخاطر همین توی آرایه هست و بعدش توی یه حلقه for اون فایل های دریافتی رو توی یه مسیر خاص با استفاده از متدی که توی خط پنج هست (aveuploadfile) انجام میشه.

تست با curl:

curl -X POST http://localhost:8080/upload \
-F "upload[]=@/Users/appleboy/test1.zip" \
-F "upload[]=@/Users/appleboy/test2.zip" \
-H "Content-Type: multipart/form-data"





gogolangginگولنگگو
Go Developer(gopher-academy.ir)
شاید از این پست‌ها خوشتان بیاید