허당 레몬도리

webserver 를 이용해 파일 업로드 기능을 만들다가 남겨놓으면 좋을거 같아 남깁니다.

 

코드는 아래 받으면 되고 Visual Studio 2017버전으로 작성이 되었습니다.

 

DotNetCoreFileUpload.zip
1.54MB

 

기본적인 코드를 소개(?)하겠습니다.

 

1. web server project create

   1.1 Controllers folder - new controller 

   1.2 Code

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;

namespace WebServer.Controllers
{
    [ApiController]
    public class FIleUploadController : ControllerBase
    {
        [HttpPost]
        [Route("api/fileuload")]
        public ActionResult FileUpload([FromForm]FileUploadModel std)
        {
            // Getting Name
            string name = std.Name;
            // Getting Image
            var image = std.File;
            // Saving Image on Server
            if (image.Length > 0)
            {
                using (var fileStream = new FileStream(image.FileName, FileMode.Create))
                {
                    image.CopyTo(fileStream);
                }
            }

            return Ok(new { status = true, message = "Student Posted Successfully" });
        }
    }

    public class FileUploadModel
    {
        public string Name { get; set; }
        public IFormFile File { get; set; }
    }
}

2. windows forms project create

   2.1 Form1.cs Code(Ui는 첨부파일 참고)

using System;
using System.IO;
using System.Net.Http;
using System.Windows.Forms;

namespace WindowClient
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnFIleSelect_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog()
            {
                FileName = "Select a text file",
                Filter = "Text files (*.txt)|*.txt",
                Title = "Open text file",
                //InitialDirectory = 
                RestoreDirectory = true
            };

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                //Get the path of specified file
                tbxFile.Text = openFileDialog.FileName;

                //Read the contents of the file into a stream
                //var fileStream = openFileDialog.OpenFile();

                //using (StreamReader reader = new StreamReader(fileStream))
                //{
                //    fileContent = reader.ReadToEnd();
                //}
            }
        }

        private async void btnFileUpload_Click(object sender, EventArgs e)
        {
            byte[] fileBytes = null;
            try
            {
                using (FileStream fileStream = new System.IO.FileStream(tbxFile.Text, FileMode.Open))
                {
                    fileBytes = new byte[fileStream.Length];
                    fileStream.Read(fileBytes, 0, fileBytes.Length);
                    
                    HttpClient httpClient = new HttpClient();
                    MultipartFormDataContent form = new MultipartFormDataContent();

                    form.Add(new StringContent("John" /* value */), "Name" /* class member name */);
                    form.Add(new ByteArrayContent(fileBytes, 0, fileBytes.Length), "File" /* class member name */, "wwwFile" /* value(file name) */);
                    HttpResponseMessage response = await httpClient.PostAsync(tbxURL.Text, form);

                    if (response.IsSuccessStatusCode)
                    {
                        // process....
                    }
                }
            }
            catch (Exception ex)
            {
                // Exception ...
            }

        }
    }
}

테스트

1. WebServer 프로젝트 디버깅 시작 

2. WindowsClient 프로젝트 디버깅 시작 

 

참고 자료

https://dottutorials.net/dotnet-core-web-api-multipart-form-data-upload-file/

profile

허당 레몬도리

@LemonDory

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!