服务器之家

服务器之家 > 正文

ASP.NET 上传文件到共享文件夹的示例

时间:2021-12-10 15:54     来源/作者:大稳·杨

创建共享文件夹参考资料

上传文件代码

  web.config 

?
1
2
3
4
5
<!--上传文件配置,UploadPath值一定是服务器ip,内网ip最好-->
<add key="UploadPath" value="\\172.21.0.10\File" />
<add key="DownloadPath" value="http://x.x.x.x:80/" />
<add key="UserName" value="ShareUser" />
<add key="Password" value="P@ssw0rd" />

  工具方法  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
public static string GetConfigString(string key, string @default = "")
        {
            return ConfigurationManager.AppSettings[key] ?? @default;
        }
 
    /// <summary>
    /// 根据文件名(包含文件扩展名)获取要保存的文件夹名称
    /// </summary>
    public class FileHelper
    {
        /// <summary>
        /// 根据文件名(包含文件扩展名)获取要保存的文件夹名称
        /// </summary>
        /// <param name="fileName">文件名(包含文件扩展名)</param>
        public static string GetSaveFolder(string fileName)
        {
            var fs = fileName.Split('.');
            var ext = fs[fs.Length - 1];
            var str = string.Empty;
            var t = ext.ToLower();
            switch (t)
            {
                case "jpg":
                case "jpeg":
                case "png":
                case "gif":
                    str = "images";
                    break;
                case "mp4":
                case "mkv":
                case "rmvb":
                    str = "video";
                    break;
                case "apk":
                case "wgt":
                    str = "app";
                    break;
                case "ppt":
                case "pptx":
                case "doc":
                case "docx":
                case "xls":
                case "xlsx":
                case "pdf":
                    str = "file";
                    break;
                default:
                    str = "file";
                    break;
            }
 
            return str;
        }
    }
 
    /// <summary>
    /// 记录日志帮助类
    /// </summary>
    public class WriteHelper
    {
        public static void WriteFile(object data)
        {
            try
            {
                string path = $@"C:\Log\";
                var filename = $"Log.txt";
                if (!Directory.Exists(path))
                    Directory.CreateDirectory(path);
                TextWriter tw = new StreamWriter(Path.Combine(path, filename), true); //true在文件末尾添加数据
 
                tw.WriteLine($"----产生时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}---------------------------------------------------------------------");
 
                tw.WriteLine(data.ToJson());
                tw.Close();
            }
            catch (Exception e)
            {
 
            }
        }
    }

  常量

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/// <summary>
    /// 文件上传配置项
    /// </summary>
    public class FileUploadConst
    {
        /// <summary>
        /// 上传地址
        /// </summary>
        public static string UploadPath => ConfigHelper.GetConfigString("UploadPath");
 
        /// <summary>
        /// 文件访问/下载地址
        /// </summary>
        public static string DownloadPath => ConfigHelper.GetConfigString("DownloadPath");
 
        /// <summary>
        /// 访问共享目录用户名
        /// </summary>
        public static string UserName => ConfigHelper.GetConfigString("UserName");
 
        /// <summary>
        /// 访问共享目录密码
        /// </summary>
        public static string Password => ConfigHelper.GetConfigString("Password");
    }

  具体上传文件代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/// <summary>
        /// 上传文件到共享文件夹
        /// </summary>
        [HttpPost, Route("api/Upload/UploadAttachment")]
        [AllowAnonymous]
        public ServiceResponse<UploadRespModel> UploadAttachment()
        {
            var viewModel = new UploadRespModel();
            var code = 200;
            var msg = "上传失败!";
 
            var path = FileUploadConst.UploadPath; //@"\\172.16.10.130\Resource";
            var s = connectState(path, FileUploadConst.UserName, FileUploadConst.Password);
 
            if (s)
            {
                var filelist = HttpContext.Current.Request.Files;
                if (filelist.Count > 0)
                {
                    var file = filelist[0];
                    var fileName = file.FileName;
                    var blobName = FileHelper.GetSaveFolder(fileName);
                    path = $@"{path}\{blobName}\";
 
                    fileName = $"{DateTime.Now:yyyyMMddHHmmss}{fileName}";
 
                    //共享文件夹的目录
                    var theFolder = new DirectoryInfo(path);
                    var remotePath = theFolder.ToString();
                    Transport(file.InputStream, remotePath, fileName);
 
                    viewModel.SaveUrl = $"{blobName}/{fileName}";
                    viewModel.DownloadUrl = PictureHelper.GetFileFullPath(viewModel.SaveUrl);
 
                    msg = "上传成功";
                }
            }
            else
            {
                code = CommonConst.Code_OprateError;
                msg = "链接服务器失败";
            }
 
            return ServiceResponse<UploadRespModel>.SuccessResponse(msg, viewModel, code);
        }
 
        /// <summary>
        /// 连接远程共享文件夹
        /// </summary>
        /// <param name="path">远程共享文件夹的路径</param>
        /// <param name="userName">用户名</param>
        /// <param name="passWord">密码</param>
        private static bool connectState(string path, string userName, string passWord)
        {
            bool Flag = false;
            Process proc = new Process();
            try
            {
                proc.StartInfo.FileName = "cmd.exe";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardInput = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.RedirectStandardError = true;
                proc.StartInfo.CreateNoWindow = true;
                proc.Start();
                string dosLine = "net use " + path + " " + passWord + " /user:" + userName;
                WriteHelper.WriteFile($"dosLine:{dosLine}");
                proc.StandardInput.WriteLine(dosLine);
                proc.StandardInput.WriteLine("exit");
                while (!proc.HasExited)
                {
                    proc.WaitForExit(1000);
                }
 
                string errormsg = proc.StandardError.ReadToEnd();
                proc.StandardError.Close();
                WriteHelper.WriteFile($"errormsg:{errormsg}");
                if (string.IsNullOrEmpty(errormsg))
                {
                    Flag = true;
                }
                else
                {
                    throw new Exception(errormsg);
                }
            }
            catch (Exception ex)
            {
                WriteHelper.WriteFile(ex);
                throw ex;
            }
            finally
            {
                proc.Close();
                proc.Dispose();
            }
 
            return Flag;
        }
 
        /// <summary>
        /// 向远程文件夹保存本地内容,或者从远程文件夹下载文件到本地
        /// </summary>
        /// <param name="inFileStream">要保存的文件的路径,如果保存文件到共享文件夹,这个路径就是本地文件路径如:@"D:\1.avi"</param>
        /// <param name="dst">保存文件的路径,不含名称及扩展名</param>
        /// <param name="fileName">保存文件的名称以及扩展名</param>
        private static void Transport(Stream inFileStream, string dst, string fileName)
        {
            WriteHelper.WriteFile($"目录-Transport:{dst}");
            if (!Directory.Exists(dst))
            {
                Directory.CreateDirectory(dst);
            }
 
            dst = dst + fileName;
 
            if (!File.Exists(dst))
            {
                WriteHelper.WriteFile($"文件不存在,开始保存");
                var outFileStream = new FileStream(dst, FileMode.Create, FileAccess.Write);
 
                var buf = new byte[inFileStream.Length];
 
                int byteCount;
 
                while ((byteCount = inFileStream.Read(buf, 0, buf.Length)) > 0)
                {
                    outFileStream.Write(buf, 0, byteCount);
                }
                WriteHelper.WriteFile($"保存完成");
                inFileStream.Flush();
 
                inFileStream.Close();
 
                outFileStream.Flush();
 
                outFileStream.Close();
            }
        }

以上就是ASP.NET 上传文件到共享文件夹的示例的详细内容,更多关于ASP.NET 上传文件的资料请关注服务器之家其它相关文章!

原文链接:https://www.cnblogs.com/dawenyang/p/13493179.html

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部