프로젝트

일반

사용자정보

통계
| 브랜치(Branch): | 개정판:

markus / FileUploadWevService / FileUpload.asmx.cs @ a2c29ea2

이력 | 보기 | 이력해설 | 다운로드 (11.6 KB)

1
using KCOMDataModel.DataModel;
2
using SvgNet;
3
using SvgNet.Elements;
4
using SvgNet.Interfaces;
5
using System;
6
using System.Collections.Generic;
7
using System.Configuration;
8
using System.Drawing;
9
using System.Drawing.Drawing2D;
10
using System.IO;
11
using System.Linq;
12
using System.Text;
13
using System.Web;
14
using System.Web.Configuration;
15
using System.Web.Services;
16

    
17
namespace FileUploadWevService
18
{
19
    /// <summary>
20
    /// FileUpload의 요약 설명입니다.
21
    /// </summary>
22
    [WebService(Namespace = "http://tempuri.org/")]
23
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
24
    [System.ComponentModel.ToolboxItem(false)]
25
    // ASP.NET AJAX를 사용하여 스크립트에서 이 웹 서비스를 호출하려면 다음 줄의 주석 처리를 제거합니다. 
26
    // [System.Web.Script.Services.ScriptService]
27
    public class FileUpload : System.Web.Services.WebService
28
    {
29

    
30
        [WebMethod]
31
        //public string Run(string ProjectNo, string VPNo, string UserID, string FileName, byte[] imageBytes)
32
        public string Run(string ProjectNo, string VPNo, string UserID, string FileName, byte[] f)
33
        {
34
            string sConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
35
            KCOMEntities entity = new KCOMEntities(sConnString);
36

    
37
            /// 사용자가 Comment한 이미지 URL를 생성한다.
38

    
39
            var item = entity.PROPERTIES.Where(data => data.TYPE == "SystemInfo" && data.PROPERTY == "Url").FirstOrDefault();
40
            string result = "";
41
            if (item != null)
42
            {
43
                result = string.Format(@"{0}/UserData/{1}/{2}/{3}", item.VALUE, ProjectNo, UserID, FileName);
44
            }
45
            else
46
            {
47
                throw new Exception("SystemInfo 정보가 없습니다.");
48
            }
49

    
50
            try
51
            {
52
                var TileSourceProperty = entity.PROPERTIES.Where(data => data.TYPE == "TileSorceStorage" && data.PROPERTY == ProjectNo).FirstOrDefault();
53
                if (TileSourceProperty == null)
54
                {
55
                    throw new Exception("TileSourceStorage 정보가 없습니다.");
56
                }
57
                /// 실제 이미지를 저장할 위치
58
                string DirectoryPath = string.Format(Path.Combine(TileSourceProperty.VALUE, "UserData", ProjectNo, UserID));
59
                DirectoryInfo directoryInfo_ = new DirectoryInfo(DirectoryPath);
60

    
61
                if (!directoryInfo_.Exists)
62
                {
63
                    directoryInfo_.Create();
64
                }
65
                //Image imageinfo = Converter(base64String);
66

    
67
                MemoryStream ms = new MemoryStream(f);
68
                FileStream fs = new FileStream(directoryInfo_ + @"\" + FileName, FileMode.Create);
69
                ms.WriteTo(fs);
70

    
71
                ms.Close();
72
                fs.Close();
73
                fs.Dispose();
74
                //imageinfo.Save(DirectoryPath + @"\" + FileName + "png", System.Drawing.Imaging.ImageFormat.Png);
75
            }
76
            catch (Exception ex)
77
            {
78
                result = ex.ToString();
79
            }
80

    
81
            return result;
82
        }
83

    
84
        [WebMethod]
85
        //public string Run(string ProjectNo, string VPNo, string UserID, string FileName, byte[] imageBytes)
86
        public string RunSymbol(string ProjectNo, string VPNo, string UserID, string FileName, byte[] f)
87
        {
88
            string sConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
89
            KCOMEntities entity = new KCOMEntities(sConnString);
90

    
91
            /// 사용자가 Comment한 이미지 URL를 생성한다.
92

    
93
            var item = entity.PROPERTIES.Where(data => data.TYPE == "SystemInfo" && data.PROPERTY == "Url").FirstOrDefault();
94
            string result = "";
95
            
96
            if (item == null)
97
            {
98
                throw new Exception("SystemInfo 정보가 없습니다.");
99
            }
100

    
101
            try
102
            {
103
                var TileSourceProperty = entity.PROPERTIES.Where(data => data.TYPE == "TileSorceStorage" && data.PROPERTY == ProjectNo).FirstOrDefault();
104
                if (TileSourceProperty == null)
105
                {
106
                    throw new Exception("TileSourceStorage 정보가 없습니다.");
107
                }
108

    
109
                /// 실제 이미지를 저장할 위치
110
                string DirectoryPath = string.Format(Path.Combine(TileSourceProperty.VALUE, "UserData", ProjectNo, UserID));
111
                DirectoryInfo directoryInfo_ = new DirectoryInfo(DirectoryPath);
112

    
113
                if (!directoryInfo_.Exists)
114
                {
115
                    directoryInfo_.Create();
116
                }
117

    
118
                var vWebConfig = WebConfigurationManager.AppSettings[0];
119
                if (true)//!ImageUploadWebService.Properties.Settings.Default.IsSaveSVG)
120
                {
121
                    MemoryStream ms = new MemoryStream(f);
122
                    FileStream fs = new FileStream(directoryInfo_ + @"\" + FileName, FileMode.Create);
123
                    ms.WriteTo(fs);
124

    
125
                    ms.Close();
126
                    fs.Close();
127
                    fs.Dispose();
128
                }
129
                else
130
                {
131
                    FileName = FileName.Replace(".png", ".svg");
132

    
133
                    using (MemoryStream ms = new MemoryStream(f))
134
                    {
135
                        using (var image = Image.FromStream(ms))
136
                        {
137
                            using (var ig = new SvgGraphics(Color.Transparent))
138
                            {
139
                                //ig.PixelOffsetMode = PixelOffsetMode.HighSpeed;
140
                                ig.CompositingQuality = CompositingQuality.HighSpeed;
141

    
142
                                ig.DrawImage(image, 0, 0);
143
                                GraphicsContainer cnt = ig.BeginContainer();
144
                                ig.EndContainer(cnt);
145

    
146
                                string s = ig.WriteSVGString();
147
                                string tempFile = Path.Combine(directoryInfo_.FullName, FileName);
148
                                var tw = new StreamWriter(tempFile, false);
149
                                tw.Write(s);
150
                                tw.Close();
151
                                tw.Dispose();
152
                                ig.Dispose();
153
                            }
154
                        }
155
                    }
156
                }
157

    
158
                result = string.Format(@"{0}/UserData/{1}/{2}/{3}", item.VALUE, ProjectNo, UserID, FileName);
159
            }
160
            catch (Exception ex)
161
            {
162
                result = ex.ToString();
163
            }
164

    
165
            return result;
166
        }
167

    
168

    
169

    
170
        [WebMethod]
171
        public string ServerMapPathTest(string uri)
172
        {
173
            return GetFilePath(uri);
174
        }
175

    
176
        private string GetFilePath(string fileUri)
177
        {
178
            string filePath = null;
179

    
180
            try
181
            {
182
                string sConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
183
                KCOMEntities entity = new KCOMEntities(sConnString);
184

    
185
                var sysinfo = entity.PROPERTIES.Where(data => data.TYPE == "SystemInfo" && data.PROPERTY == "Url").FirstOrDefault();
186

    
187
                filePath = HttpContext.Current.Server.MapPath(new Uri(fileUri.Replace(sysinfo.VALUE, $"{ "Http://" + HttpContext.Current.Request.Url.Authority}")).LocalPath);
188
            }
189
            catch (Exception ex)
190
            {
191
                throw;
192
            }
193

    
194
            return filePath;
195
        }
196

    
197

    
198
        [WebMethod]
199
        public string SymbolRegen()
200
        {
201
            string result = "";
202

    
203
            try
204
            {
205
                StringBuilder sb = new StringBuilder();
206

    
207
                string sConnString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
208
                KCOMEntities entity = new KCOMEntities(sConnString);
209

    
210
                var sysinfo = entity.PROPERTIES.Where(data => data.TYPE == "SystemInfo" && data.PROPERTY == "Url").FirstOrDefault();
211

    
212
                foreach (var symbol in entity.SYMBOL_PRIVATE.Where(x => !x.IMAGE_URL.EndsWith(".svg")))
213
                {
214
                    //if (symbol.IMAGE_URL.StartsWith(sysinfo.VALUE))
215
                    //{
216
                    //    symbol.IMAGE_URL = symbol.IMAGE_URL.Replace(sysinfo.VALUE, "");
217
                    //}
218

    
219
                    if (symbol.IMAGE_URL.EndsWith(".png") || symbol.IMAGE_URL.EndsWith(".jpg"))
220
                    {
221
                        var filePath = GetFilePath(symbol.IMAGE_URL);
222

    
223
                        symbol.IMAGE_URL = symbol.IMAGE_URL.Replace(".png", ".svg").Replace(".jpg", ".svg");
224

    
225
                        using (var image = Image.FromFile(filePath))
226
                        {
227
                            using (var ig = new SvgGraphics(Color.Transparent))
228
                            {
229
                                ig.SmoothingMode = SmoothingMode.HighSpeed;
230
                                ig.DrawImage(image, 0, 0);
231
                                GraphicsContainer cnt = ig.BeginContainer();
232
                                ig.EndContainer(cnt);
233

    
234
                                string s = ig.WriteSVGString();
235
                                string svgFile = filePath.Replace(".png", ".svg").Replace(".jpg", ".svg");
236

    
237
                                var tw = new StreamWriter(svgFile, false);
238
                                tw.Write(s);
239
                                tw.Close();
240
                                tw.Dispose();
241
                                ig.Dispose();
242
                            }
243
                        }
244
                    }
245
                }
246

    
247
                foreach (var symbol in entity.SYMBOL_PUBLIC.Where(x => !x.IMAGE_URL.EndsWith(".svg")))
248
                {
249
                    //if (symbol.IMAGE_URL.StartsWith(sysinfo.VALUE))
250
                    //{
251
                    //    symbol.IMAGE_URL = symbol.IMAGE_URL.Replace(sysinfo.VALUE, "");
252
                    //}
253

    
254
                    if (symbol.IMAGE_URL.EndsWith(".png") || symbol.IMAGE_URL.EndsWith(".jpg"))
255
                    {
256
                        var filePath = GetFilePath(symbol.IMAGE_URL);
257

    
258
                        symbol.IMAGE_URL = symbol.IMAGE_URL.Replace(".png", ".svg").Replace(".jpg", ".svg");
259

    
260
                        using (var image = Image.FromFile(filePath))
261
                        {
262
                            using (var ig = new SvgGraphics(Color.Transparent))
263
                            {
264
                                ig.DrawImage(image, 0, 0);
265
                                GraphicsContainer cnt = ig.BeginContainer();
266
                                ig.EndContainer(cnt);
267

    
268
                                string s = ig.WriteSVGString();
269
                                string svgFile = filePath.Replace(".png", ".svg").Replace(".jpg", ".svg");
270

    
271
                                var tw = new StreamWriter(svgFile, false);
272
                                tw.Write(s);
273
                                tw.Close();
274
                                tw.Dispose();
275
                                ig.Dispose();
276
                            }
277
                        }
278
                    }
279
                }
280

    
281
                entity.SaveChanges();
282

    
283
                result = "OK";
284
            }
285
            catch (Exception)
286
            {
287
                throw;
288
            }
289
            return result;
290
        }
291

    
292

    
293
        public Image Converter(string base64String)
294
        {
295
            byte[] imageBytes = Convert.FromBase64String(base64String);
296

    
297
            using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
298
            {
299
                Image image = Image.FromStream(ms, true);
300
                return image;
301
            }
302
        }
303
    }
304
}
클립보드 이미지 추가 (최대 크기: 500 MB)