public int FileUpload(string updateType, DataTable dt, byte[] filedata, int filedatalength, long fileLenth, long fileIdx, int key) { UpdateDirectory_Chk(); //UpdateType폴더 경로 string fldU = UpdateTypeDirectoryPath(updateType); //임시폴더 경로 string fldT = UpdateTypeTempDirectoryPath(updateType); //히스토리경로 string fldH = UpdateTypeHistoryDirectoryPath(updateType); string crc; FileInfo fi; FileInfo fileT; DataRow[] rows; UpdateTypeKey uKey = new UpdateTypeKey(updateType); DateTime dtFile; FileStream fs; if (fileIdx == 0) { if (dicUploadStream.ContainsKey(uKey)) { //기존 스트림 정리 foreach (UpdateTypeKey k in dicUploadStream.Keys) { if (k.Equals(uKey)) { fs = dicUploadStream[k]; if (k.StreamStatus == enStreamStatus.Opened) { fnc.FileStream_Close(ref fs); } k.StreamStatus = enStreamStatus.Closed; uKey = k; } } } else { dicUploadStream.Add(uKey, null); } uKey.ds = UpdateType_GetDataSet(updateType); //신규/기존 데이터 처리 uKey.row = uKey.ds.Tables[0].NewRow(); uKey.row.ItemArray = dt.Rows[0].ItemArray; rows = uKey.ds.Tables[0].Select(string.Format("UpdateType = '{0}' and FileName = '{1}'", updateType, uKey.row["FileName"])); if (rows.Length > 0) { uKey.row = rows[0]; uKey.row.ItemArray = dt.Rows[0].ItemArray; } else { uKey.ds.Tables[0].Rows.Add(uKey.row); } if (uKey.row["ZipFilePath"].ToString() == string.Empty) { uKey.file = fldU + "\\" + uKey.row["filename"].ToString(); uKey.fileT = fldT + "\\" + uKey.row["filename"].ToString(); } else { //압축파일로 올라옴 uKey.file = fldU + "\\" + uKey.row["ZipFilePath"].ToString(); uKey.fileT = fldT + "\\" + uKey.row["ZipFilePath"].ToString(); } uKey.fileT = fnc.TempFile_init(uKey.fileT); uKey.Key_GetNew(); key = uKey.Key; fileT = new FileInfo(uKey.fileT); //임시 폴더 파일 삭제 if (fileT.Exists) { fileT.Delete(); } if (!Directory.Exists(fileT.DirectoryName)) { Directory.CreateDirectory(fileT.DirectoryName); } dicUploadStream[uKey] = new FileStream(uKey.fileT, FileMode.Create, FileAccess.Write, FileShare.Delete); } else { foreach (UpdateTypeKey k in dicUploadStream.Keys) { if (k.Equals(uKey)) { uKey = k; } } if (uKey.Key != key) { throw new Exception("WEB FileUpload 오류 - Key 값 불일치"); } } fs = dicUploadStream[uKey]; //file stream write fs.Write(filedata, 0, filedatalength); uKey.StreamStatus = enStreamStatus.Opened; //파일 업로드 종료 if ((fileIdx + filedata.Length) >= fileLenth) { //스트립종료 if (uKey.StreamStatus == enStreamStatus.Opened) { fnc.FileStream_Close(ref fs); } uKey.StreamStatus = enStreamStatus.Closed; fi = new FileInfo(uKey.fileT); //crc 확인 crc = fnc.Get_Crc32(uKey.fileT); if (!crc.Equals(uKey.row["crc"].ToString())) { try { fi.Delete(); } catch { } finally { throw new Exception("CRC 불일치"); } } dtFile = (DateTime)uKey.row["File_fileDate"]; //update 폴더로 파일 이동 if (File.Exists(uKey.file)) { File.Delete(uKey.file); } fileT = new FileInfo(uKey.file); if (!Directory.Exists(fileT.DirectoryName)) { Directory.CreateDirectory(fileT.DirectoryName); } fi.CopyTo(uKey.file); fi = new FileInfo(uKey.file); string[] hflds = uKey.row["filename"].ToString().Split('\\'); fldH += "\\"; for (int hi = 0; hi < hflds.Length - 1; hi++) { //if (hfile != string.Empty) hfile += "\\"; fldH += hflds[hi] + "\\"; } //history 폴더의 파일폴더 확인 if (!Directory.Exists(fldH)) { Directory.CreateDirectory(fldH); } //history 생성 uKey.fileH = string.Format("{0}{1}_{2}_{3}.{4}", fldH, fi.Name, dtFile.ToString("yyyyMMddHHmmss"), uKey.row["file_version"], fi.Extension); if (File.Exists(uKey.fileH)) { File.Delete(uKey.fileH); } fi.CopyTo(uKey.fileH); uKey.row["FileDate"] = uKey.row["File_fileDate"]; uKey.row["Version"] = uKey.row["File_Version"]; //dataset 저장 uKey.ds.WriteXml(UpdateTypeXmlfilePath(updateType), XmlWriteMode.WriteSchema); } return(key); }
public bool Equals(UpdateTypeKey obj) { return(UpdateType == obj.UpdateType); }