예제 #1
0
        public async Task <HttpResponseMessage> WriteUpload()
        {
            // 요청이 multipart/form-data를 담고 있는지 확인
            if (!Request.Content.IsMimeMultipartContent())
            {
                //아니라면 에러
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            string fullPath = ConfigurationManager.AppSettings["FilePath"].ToString();
            var    provider = new CustomMultipartFormDataStreamProvider(fullPath);

            //- > 파일데이터 생성 - (MultipartFormDataStreamProvider 오버라이드 후 커스텀적용)

            try
            {
                //비동기 적용
                await Request.Content.ReadAsMultipartAsync(provider);

                //폼데이터
                BoardInfo info = new BoardInfo();
                info.userId       = provider.FormData.GetValues("userId").SingleOrDefault();
                info.boardTitle   = provider.FormData.GetValues("boardTItle").SingleOrDefault();
                info.boardContent = provider.FormData.GetValues("boardContent").SingleOrDefault();
                List <Boardfile> list = new List <Boardfile>();

                //다중파일데이터
                for (int i = 0; i < provider.FileData.Count; i++)
                {
                    Boardfile file = new Boardfile
                    {
                        fileName   = provider.FileData[i].Headers.ContentDisposition.FileName.Replace("\"", string.Empty).ToString()
                        , filePath = provider.FileData[i].LocalFileName
                        , fileGuid = provider.FileData[i].LocalFileName.Substring(provider.FileData[i].LocalFileName.IndexOf("Upload") + 7)
                    };
                    list.Add(file);
                }
                info.BoardFileList = list;

                //DB INSERT
                if (_BoardBiz.RegisterBoardInfo(info))
                {
                    return(Request.CreateResponse(HttpStatusCode.OK));
                }

                return(Request.CreateResponse(HttpStatusCode.NotModified));
            }
            catch (System.Exception e)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e));
            }
        }
예제 #2
0
        public async Task <HttpResponseMessage> UpdateUpload()
        {
            BoardInfo info = new BoardInfo();

            // 요청이 multipart/form-data를 담고 있는지 확인
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }
            //업로드 경로생성
            string fullPath = ConfigurationManager.AppSettings["FilePath"].ToString();
            var    provider = new CustomMultipartFormDataStreamProvider(fullPath);

            List <Boardfile> list = new List <Boardfile>();

            try
            {
                await Request.Content.ReadAsMultipartAsync(provider);

                //정보입력
                info.boardId      = Int32.Parse(provider.FormData.GetValues("boardId").SingleOrDefault());
                info.userId       = provider.FormData.GetValues("userId").SingleOrDefault();
                info.boardTitle   = provider.FormData.GetValues("boardTitle").SingleOrDefault();
                info.boardContent = provider.FormData.GetValues("boardContent").SingleOrDefault();

                //먼저 신규파일있을시 파일 info담기
                for (int i = 0; i < provider.FileData.Count; i++)
                {
                    Boardfile file = new Boardfile
                    {
                        fileName = provider.FileData[i].Headers.ContentDisposition.FileName.Replace("\"", string.Empty).ToString(),
                        filePath = provider.FileData[i].LocalFileName,
                        fileGuid = provider.FileData[i].LocalFileName.Substring(provider.FileData[i].LocalFileName.IndexOf("Upload") + 7)
                    };
                    list.Add(file);
                }
                info.BoardFileList = list;
            }
            catch (Exception) { }

            // 기존 파일처리(삭제 데이터)
            //cnt = 기존 파일데이터 삭제 개수
            int cnt = Int32.Parse(provider.FormData.GetValues("dFileCnt").SingleOrDefault());

            //삭제 파일있을시
            if (cnt > 0)
            {
                //FileId를 기준으로 삭제
                for (int i = 0; i < cnt; i++)
                {
                    int dFile = Int32.Parse(provider.FormData.GetValues("dFile" + (i + 1)).SingleOrDefault());
                    _BoardBiz.DeleteBoardFile(dFile); // DB,서버 동시삭제
                }
            } //파일처리 END


            //업데이트 처리
            //정보 업데이트(신규파일 등록 && 정보 업데이트)
            if ((_BoardBiz.UpdateBoardInfo(info)) && (_BoardBiz.RegisterBoardFile(list, info.boardId)))
            {
                return(Request.CreateResponse(HttpStatusCode.OK));
            }
            return(Request.CreateResponse(HttpStatusCode.NotModified));
        }