zhengbingbing лет назад: 6
Родитель
Сommit
de35459c1b

+ 19 - 8
codegit/CallCenterApi/CallCenterApi.DAL/T_Sys_Accessories.cs

@@ -41,9 +41,9 @@ namespace CallCenterApi.DAL
41 41
         {
42 42
             StringBuilder strSql = new StringBuilder();
43 43
             strSql.Append("insert into T_Sys_Accessories(");
44
-            strSql.Append("F_FileName,F_FileType,F_FileUrl,F_UserCode,F_AddTime,F_Size)");
44
+            strSql.Append("F_FileName,F_FileType,F_FileUrl,F_UserCode,F_AddTime,F_Size,F_OriName)");
45 45
             strSql.Append(" values (");
46
-            strSql.Append("@F_FileName,@F_FileType,@F_FileUrl,@F_UserCode,@F_AddTime,@F_Size)");
46
+            strSql.Append("@F_FileName,@F_FileType,@F_FileUrl,@F_UserCode,@F_AddTime,@F_Size,@F_OriName)");
47 47
             strSql.Append(";select @@IDENTITY");
48 48
             SqlParameter[] parameters = {
49 49
                     new SqlParameter("@F_FileName", SqlDbType.NVarChar,100),
@@ -51,13 +51,16 @@ namespace CallCenterApi.DAL
51 51
                     new SqlParameter("@F_FileUrl", SqlDbType.NVarChar,200),
52 52
                     new SqlParameter("@F_UserCode", SqlDbType.NVarChar,20),
53 53
                     new SqlParameter("@F_AddTime", SqlDbType.DateTime),
54
-                    new SqlParameter("@F_Size", SqlDbType.BigInt,8)};
54
+                    new SqlParameter("@F_Size", SqlDbType.BigInt,8),
55
+                    new SqlParameter("@F_OriName", SqlDbType.NVarChar,500)
56
+            };
55 57
             parameters[0].Value = model.F_FileName;
56 58
             parameters[1].Value = model.F_FileType;
57 59
             parameters[2].Value = model.F_FileUrl;
58 60
             parameters[3].Value = model.F_UserCode;
59 61
             parameters[4].Value = model.F_AddTime;
60 62
             parameters[5].Value = model.F_Size;
63
+            parameters[6].Value = model.F_OriName;
61 64
 
62 65
             object obj = DbHelperSQL.GetSingle(strSql.ToString(), parameters);
63 66
             if (obj == null)
@@ -81,7 +84,8 @@ namespace CallCenterApi.DAL
81 84
             strSql.Append("F_FileUrl=@F_FileUrl,");
82 85
             strSql.Append("F_UserCode=@F_UserCode,");
83 86
             strSql.Append("F_AddTime=@F_AddTime,");
84
-            strSql.Append("F_Size=@F_Size");
87
+            strSql.Append("F_Size=@F_Size,");
88
+            strSql.Append("F_OriName=@F_OriName ");
85 89
             strSql.Append(" where F_FileId=@F_FileId");
86 90
             SqlParameter[] parameters = {
87 91
                     new SqlParameter("@F_FileName", SqlDbType.NVarChar,100),
@@ -90,6 +94,7 @@ namespace CallCenterApi.DAL
90 94
                     new SqlParameter("@F_UserCode", SqlDbType.NVarChar,20),
91 95
                     new SqlParameter("@F_AddTime", SqlDbType.DateTime),
92 96
                     new SqlParameter("@F_Size", SqlDbType.BigInt,8),
97
+                    new SqlParameter("@F_OriName", SqlDbType.NVarChar,500),
93 98
                     new SqlParameter("@F_FileId", SqlDbType.Int,4)};
94 99
             parameters[0].Value = model.F_FileName;
95 100
             parameters[1].Value = model.F_FileType;
@@ -97,7 +102,8 @@ namespace CallCenterApi.DAL
97 102
             parameters[3].Value = model.F_UserCode;
98 103
             parameters[4].Value = model.F_AddTime;
99 104
             parameters[5].Value = model.F_Size;
100
-            parameters[6].Value = model.F_FileId;
105
+            parameters[6].Value = model.F_OriName;
106
+            parameters[7].Value = model.F_FileId;
101 107
 
102 108
             int rows = DbHelperSQL.ExecuteSql(strSql.ToString(), parameters);
103 109
             if (rows > 0)
@@ -161,7 +167,7 @@ namespace CallCenterApi.DAL
161 167
         {
162 168
 
163 169
             StringBuilder strSql = new StringBuilder();
164
-            strSql.Append("select  top 1 F_FileId,F_FileName,F_FileType,F_FileUrl,F_UserCode,F_AddTime,F_Size from T_Sys_Accessories ");
170
+            strSql.Append("select  top 1 * from T_Sys_Accessories ");
165 171
             strSql.Append(" where F_FileId=@F_FileId");
166 172
             SqlParameter[] parameters = {
167 173
                     new SqlParameter("@F_FileId", SqlDbType.Int,4)
@@ -217,6 +223,11 @@ namespace CallCenterApi.DAL
217 223
                 {
218 224
                     model.F_Size = long.Parse(row["F_Size"].ToString());
219 225
                 }
226
+                if (row["F_OriName"] != null)
227
+                {
228
+                    model.F_OriName = row["F_OriName"].ToString();
229
+                }
230
+
220 231
             }
221 232
             return model;
222 233
         }
@@ -227,7 +238,7 @@ namespace CallCenterApi.DAL
227 238
         public DataSet GetList(string strWhere)
228 239
         {
229 240
             StringBuilder strSql = new StringBuilder();
230
-            strSql.Append("select F_FileId,F_FileName,F_FileType,F_FileUrl,F_UserCode,F_AddTime,F_Size ");
241
+            strSql.Append("select * ");
231 242
             strSql.Append(" FROM T_Sys_Accessories ");
232 243
             if (strWhere.Trim() != "")
233 244
             {
@@ -247,7 +258,7 @@ namespace CallCenterApi.DAL
247 258
             {
248 259
                 strSql.Append(" top " + Top.ToString());
249 260
             }
250
-            strSql.Append(" F_FileId,F_FileName,F_FileType,F_FileUrl,F_UserCode,F_AddTime,F_Size ");
261
+            strSql.Append(" * ");
251 262
             strSql.Append(" FROM T_Sys_Accessories ");
252 263
             if (strWhere.Trim() != "")
253 264
             {

+ 9 - 0
codegit/CallCenterApi/CallCenterApi.Interface/CallCenterApi.Interface/Configs/system.config

@@ -26,4 +26,13 @@
26 26
   <add key="MessageUrl" value="http://jiayi.800100.net/sycw/index.html?menucode=GDXQ" />
27 27
   <!-- ================== 4:公司名称中需截取掉的字符串 ================== -->
28 28
   <add key="keystring" value="有限公司,公司,科技,网络,信息,河南,河南省,洛阳,洛阳市,郑州,郑州市,南阳,南阳市,新乡,新乡市,有限、商贸、市"/>
29
+  <!-- ================== 5:IVR文件上传FTP配置参数 ================== -->
30
+  <!-- 设置FTP -->
31
+  <add key="ftp" value="192.168.4.18" />
32
+  <!-- 设置账户名 -->
33
+  <add key="account" value="bingbing" />
34
+  <!-- 设置密码 -->
35
+  <add key="password" value="Bing123456" />
36
+  <!-- 文件保存位置 -->
37
+  <add key="saveloc" value="\upload_wav\" />
29 38
 </appSettings>

+ 53 - 21
codegit/CallCenterApi/CallCenterApi.Interface/CallCenterApi.Interface/Controllers/knowledge/KnowledgeController.cs

@@ -462,41 +462,73 @@ namespace CallCenterApi.Interface.Controllers.knowledge
462 462
         {
463 463
             try
464 464
             {
465
+                if (file == null) return Error("参数传入失败");
466
+                if (Request.Files.Count == 0) return Error("保存失败");
467
+
465 468
                 string userCode = CurrentUser.UserData.F_UserCode;
466 469
                 string filePathName = string.Empty;
470
+                #region 保存文件到本地路径
467 471
                 string path = "/Upload/Files/" + DateTime.Now.ToString("yyyy/MM/dd") + "/";
468 472
                 string localPath = Server.MapPath(Path.Combine(HttpRuntime.AppDomainAppPath, path));
469
-                if (Request.Files.Count == 0)
470
-                {
471
-                    return Error("保存失败");
472
-                }
473 473
                 string ex = Path.GetExtension(file.FileName);
474
+                string oriname = Path.GetFileNameWithoutExtension(file.FileName);
474 475
                 filePathName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_" + Guid.NewGuid().ToString("N") + ex;
475 476
                 if (!System.IO.Directory.Exists(localPath))
476 477
                 {
477 478
                     System.IO.Directory.CreateDirectory(localPath);
478 479
                 }
479
-                file.SaveAs(Path.Combine(localPath, filePathName));
480
-                #region 添加日志
481
-                Model.T_Sys_Accessories model_T_Sys_Accessories = new Model.T_Sys_Accessories();
482
-                model_T_Sys_Accessories.F_AddTime = DateTime.Now;//上传时间
483
-                model_T_Sys_Accessories.F_FileName = filePathName;//附件名称
484
-                model_T_Sys_Accessories.F_FileType = type;//附件类型
485
-                model_T_Sys_Accessories.F_FileUrl = path + filePathName;//附件地址
486
-                model_T_Sys_Accessories.F_Size = size;
487
-                model_T_Sys_Accessories.F_UserCode = userCode;//上传人  
488
-                int fid = new BLL.T_Sys_Accessories().Add(model_T_Sys_Accessories);
489
-
480
+                string physicalpath = Path.Combine(localPath, filePathName);
481
+                file.SaveAs(physicalpath);
482
+                #endregion
483
+                #region 读取配置的上传路径-原文件和修改过格式的文件均上传至此
484
+                string savedir = Configs.GetValue("saveloc");
485
+                if (!System.IO.Directory.Exists(savedir))
486
+                {
487
+                    System.IO.Directory.CreateDirectory(savedir);
488
+                }
490 489
                 #endregion
491
-                if (fid > 0)
490
+                if (!string.IsNullOrEmpty(physicalpath))
492 491
                 {
493
-                    //返回附件的ID
494
-                    model_T_Sys_Accessories.F_FileId = fid;//修改为返回对象以便查看图片
495
-                    return Success("文件成功", model_T_Sys_Accessories);
492
+                    #region 上传到ftp
493
+                    uploadFile upfile = new uploadFile();
494
+                    //通过读取配置文件,获取数据库
495
+                    string _ftp = Configs.GetValue("ftp");
496
+                    string _acc = Configs.GetValue("account");
497
+                    string _pwd = Configs.GetValue("password");
498
+
499
+                    upfile.ftpPath = _ftp;
500
+                    upfile.ftpUserID = _acc;
501
+                    upfile.ftpPassword = _pwd;
502
+                    //20180207 原文件同时保存
503
+                    string uploadBeforres = upfile.UploadLocalToFtp(physicalpath);
504
+                    #endregion
505
+                    if (uploadBeforres.Equals("上传成功!"))
506
+                    {
507
+                        #region 添加日志
508
+                        Model.T_Sys_Accessories model_T_Sys_Accessories = new Model.T_Sys_Accessories();
509
+                        model_T_Sys_Accessories.F_AddTime = DateTime.Now;//上传时间
510
+                        model_T_Sys_Accessories.F_FileName = filePathName;//附件名称
511
+                        model_T_Sys_Accessories.F_FileType = type;//附件类型
512
+                        model_T_Sys_Accessories.F_FileUrl = (filePathName).Replace('\\', '/');//附件地址
513
+                        model_T_Sys_Accessories.F_Size = size;
514
+                        model_T_Sys_Accessories.F_UserCode = userCode;//上传人  
515
+                        model_T_Sys_Accessories.F_OriName = oriname;
516
+                        int fid = new BLL.T_Sys_Accessories().Add(model_T_Sys_Accessories);
517
+                        #endregion
518
+                        if (fid > 0)
519
+                        {
520
+                            //返回附件的ID
521
+                            model_T_Sys_Accessories.F_FileId = fid;//修改为返回对象以便查看图片
522
+                            return Success("文件上传成功", model_T_Sys_Accessories);
523
+                        }
524
+                        else
525
+                            return Success("文件上传成功,日志记录失败");
526
+                    }
527
+                    else
528
+                        return Error("文件上传失败,请重新上传,失败原因:" + uploadBeforres);
496 529
                 }
497 530
                 else
498
-                    return Success("文件失败");
499
-
531
+                    return Error("格式修改出错,请重新上传");
500 532
             }
501 533
             catch (Exception ex)
502 534
             {

+ 16 - 0
codegit/CallCenterApi/CallCenterApi.Model/T_Sys_Accessories.cs

@@ -22,6 +22,7 @@ namespace CallCenterApi.Model
22 22
         private string _f_usercode;
23 23
         private DateTime? _f_addtime;
24 24
         private long? _f_size;
25
+        private string _f_oriname;
25 26
         /// <summary>
26 27
         /// 附件id
27 28
         /// </summary>
@@ -78,6 +79,21 @@ namespace CallCenterApi.Model
78 79
             set { _f_size = value; }
79 80
             get { return _f_size; }
80 81
         }
82
+        /// <summary>
83
+        /// 文件原名
84
+        /// </summary>
85
+        public string F_OriName
86
+        {
87
+            get
88
+            {
89
+                return _f_oriname;
90
+            }
91
+
92
+            set
93
+            {
94
+                _f_oriname = value;
95
+            }
96
+        }
81 97
         #endregion Model
82 98
     }
83 99
 }

+ 189 - 0
codegit/CallCenterCommon/CallCenter.Utility/uploadFile.cs

@@ -0,0 +1,189 @@
1
+using System;
2
+using System.Collections.Generic;
3
+using System.IO;
4
+using System.Linq;
5
+using System.Net;
6
+using System.Text;
7
+using System.Threading.Tasks;
8
+
9
+namespace CallCenter.Utility
10
+{
11
+    public class uploadFile
12
+    {
13
+        public string ftpPath;
14
+        public string ftpUserID;
15
+        public string ftpPassword;
16
+
17
+        /// <summary>
18
+        /// 上传文件
19
+        /// </summary>
20
+        /// <param name="fileinfo">需要上传的文件</param>
21
+        public string UploadLocalToFtp(string localFile)
22
+        {
23
+            string res = "";
24
+            if (!File.Exists(localFile))
25
+            {
26
+                res = "文件:“" + localFile + "” 不存在!";
27
+                return res;
28
+            }
29
+            FileInfo fileInf = new FileInfo(localFile);
30
+            //改后文件
31
+            #region 改后文件
32
+            //string temp_filename = localFile.Split('\\').Last().Split('.')[0] + "_temp";
33
+            //string localfileAft = Path.GetDirectoryName(localFile) + "\\" + temp_filename + ".wav";
34
+            //FileInfo fileInfAft = new FileInfo(localfileAft);
35
+            #endregion
36
+            string ftpURI = "ftp://" + ftpPath + "/";
37
+            string uri = ftpURI + fileInf.Name;
38
+            //string uriAft = ftpURI + fileInfAft.Name;
39
+            FtpWebRequest reqFTP;
40
+            //20180209
41
+            //System.GC.Collect();
42
+            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));// 根据uri创建FtpWebRequest对象   
43
+            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);// ftp用户名和密码  
44
+            reqFTP.KeepAlive = false;// 默认为true,连接不会被关闭 // 在一个命令之后被执行  
45
+            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;// 指定执行什么命令  
46
+            reqFTP.UseBinary = true;// 指定数据传输类型  
47
+            reqFTP.UsePassive = true;
48
+            reqFTP.ContentLength = fileInf.Length;// 上传文件时通知服务器文件的大小  
49
+            int buffLength = 2048;// 缓冲大小设置为2kb  
50
+            byte[] buff = new byte[buffLength];
51
+            int contentLen;
52
+
53
+            // 打开一个文件流 (System.IO.FileStream) 去读上传的文件  
54
+            //FileStream fs = fileInf.OpenRead();
55
+            using (FileStream fs = new FileStream(localFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
56
+            {
57
+                try
58
+                {
59
+                    res += uri + localFile;
60
+                    using (Stream strm = reqFTP.GetRequestStream())// 把上传的文件写入流
61
+                    {
62
+                        //StreamReader strm = new StreamReader(fs, System.Text.Encoding.Default);
63
+                        contentLen = fs.Read(buff, 0, buffLength);// 每次读文件流的2kb 
64
+                        while (contentLen != 0)// 流内容没有结束  
65
+                        {
66
+                            // 把内容从file stream 写入 upload stream  
67
+                            strm.Write(buff, 0, contentLen);
68
+                            contentLen = fs.Read(buff, 0, buffLength);
69
+                        }
70
+                        //StringBuilder sb = new StringBuilder();
71
+                        //while (!strm.EndOfStream)
72
+                        //{
73
+                        //    sb.AppendLine(strm.ReadLine() + "<br>");
74
+                        //}
75
+                    }
76
+                    // 关闭两个流  
77
+                    //strm.Close();
78
+                    fs.Close();
79
+                    res = "上传成功!";
80
+                }
81
+                catch (Exception ex)
82
+                {
83
+                    res += "上传文件【" + ftpPath + "/" + fileInf.Name + "】时,发生错误:" + ex.Message + "<br/>。路径:" + localFile;
84
+                }
85
+            }
86
+            //FtpWebRequest reqFTP1;
87
+            ////20180209
88
+            ////System.GC.Collect();
89
+            //reqFTP1 = (FtpWebRequest)FtpWebRequest.Create(new Uri(uriAft));// 根据uri创建FtpWebRequest对象   
90
+            //reqFTP1.Credentials = new NetworkCredential(ftpUserID, ftpPassword);// ftp用户名和密码  
91
+            //reqFTP1.KeepAlive = false;// 默认为true,连接不会被关闭 // 在一个命令之后被执行  
92
+            //reqFTP1.Method = WebRequestMethods.Ftp.UploadFile;// 指定执行什么命令  
93
+            //reqFTP1.UseBinary = true;// 指定数据传输类型  
94
+            //reqFTP1.UsePassive = true;
95
+            //reqFTP1.ContentLength = fileInfAft.Length;// 上传文件时通知服务器文件的大小  
96
+            //int buffLengthaft = 2048;// 缓冲大小设置为2kb  
97
+            //byte[] buffaft = new byte[buffLengthaft];
98
+            //int contentLenaft;
99
+
100
+            // 打开一个文件流 (System.IO.FileStream) 去读上传的文件  
101
+            //FileStream fs = fileInf.OpenRead();
102
+            //using (FileStream fs1 = new FileStream(localfileAft, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
103
+            //{
104
+            //    try
105
+            //    {
106
+            //        res += uriAft + localfileAft;
107
+            //        using (Stream strm1 = reqFTP1.GetRequestStream())// 把上传的文件写入流
108
+            //        {
109
+            //            //StreamReader strm = new StreamReader(fs, System.Text.Encoding.Default);
110
+            //            contentLenaft = fs1.Read(buffaft, 0, buffLengthaft);// 每次读文件流的2kb 
111
+            //            while (contentLenaft != 0)// 流内容没有结束  
112
+            //            {
113
+            //                // 把内容从file stream 写入 upload stream  
114
+            //                strm1.Write(buffaft, 0, contentLenaft);
115
+            //                contentLenaft = fs1.Read(buffaft, 0, buffLengthaft);
116
+            //            }
117
+            //            //StringBuilder sb = new StringBuilder();
118
+            //            //while (!strm.EndOfStream)
119
+            //            //{
120
+            //            //    sb.AppendLine(strm.ReadLine() + "<br>");
121
+            //            //}
122
+            //        }
123
+            //        // 关闭两个流  
124
+            //        //strm.Close();
125
+            //        fs1.Close();
126
+            //        res = "上传成功!";
127
+            //    }
128
+            //    catch (Exception ex)
129
+            //    {
130
+            //        res += "上传文件【" + ftpPath + "/" + fileInf.Name + "】时,发生错误:" + ex.Message + "<br/>。路径:" + localFile;
131
+            //    }
132
+            //}
133
+            return res;
134
+        }
135
+
136
+        /// <summary>  
137
+        /// 判断ftp服务器上该目录是否存在  
138
+        /// </summary>  
139
+        /// <param name="ftpPath">FTP路径目录</param>  
140
+        /// <param name="dirName">目录上的文件夹名称</param>  
141
+        /// <returns></returns>  
142
+        private bool CheckDirectoryExist(string ftpPath, string dirName)
143
+        {
144
+            bool flag = true;
145
+            try
146
+            {
147
+                //实例化FTP连接  
148
+                FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpPath + dirName);
149
+                ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
150
+                ftp.Method = WebRequestMethods.Ftp.ListDirectory;
151
+                FtpWebResponse response = (FtpWebResponse)ftp.GetResponse();
152
+                response.Close();
153
+            }
154
+            catch (Exception)
155
+            {
156
+                flag = false;
157
+            }
158
+            return flag;
159
+        }
160
+
161
+        /// <summary>  
162
+        /// 创建文件夹    
163
+        /// </summary>    
164
+        /// <param name="ftpPath">FTP路径</param>    
165
+        /// <param name="dirName">创建文件夹名称</param>    
166
+        public void MakeDir(string ftpPath, string dirName)
167
+        {
168
+            FtpWebRequest reqFTP;
169
+            try
170
+            {
171
+                string ui = (ftpPath + dirName).Trim();
172
+                reqFTP = (FtpWebRequest)FtpWebRequest.Create(ui);
173
+                reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
174
+                reqFTP.UseBinary = true;
175
+                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
176
+                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
177
+                Stream ftpStream = response.GetResponseStream();
178
+                ftpStream.Close();
179
+                response.Close();
180
+                //Response.Write("文件夹【" + dirName + "】创建成功!<br/>");
181
+            }
182
+            catch (Exception ex)
183
+            {
184
+                //Response.Write("新建文件夹【" + dirName + "】时,发生错误:" + ex.Message);
185
+            }
186
+
187
+        }
188
+    }
189
+}