创建共享文件夹参考资料:https://www.cnblogs.com/dansediao/p/5712657.html

上传文件代码

  web.config  

    <!--上传文件配置,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" />

  工具方法  

        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)
{ }
}
}

  常量

    /// <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");
}

  具体上传文件代码

        /// <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 上传文件到共享文件夹的更多相关文章

  1. ASP.NET Core 上传文件到共享文件夹

    参考资料:ASP.NET 上传文件到共享文件夹 创建共享文件夹参考资料:https://www.cnblogs.com/dansediao/p/5712657.html 一.配置上传文件相关参数并读取 ...

  2. ASP.NET实现二维码 ASP.Net上传文件 SQL基础语法 C# 动态创建数据库三(MySQL) Net Core 实现谷歌翻译ApI 免费版 C#发布和调试WebService ajax调用WebService实现数据库操作 C# 实体类转json数据过滤掉字段为null的字段

    ASP.NET实现二维码 using System;using System.Collections.Generic;using System.Drawing;using System.Linq;us ...

  3. ASP.NET上传文件,已经上传的大小保存在session中,在另一个页面中读取session的值不行

    想自己做个ASP.NET上传文件时显示进度条的, 按照自己的想法,其实也就是显示每次已经上传的字节,从网上找到一个方法是能够把文件变成流以后再慢慢写入的,我在那个循环写入的时候每循环一次都把已经上传的 ...

  4. asp.net上传文件夹权限配置以及权限配置的分析

    切记:一定要禁止给公共上传文件夹的权限设置为everyone,且为完全控制!除非你这个文件夹属于内部操作的,那这样做是允许,其余情况一律禁止! 基本的文件上传文件夹权限配置: 1.在需要配置上传的文件 ...

  5. asp.net上传文件并创建文件夹和删除文件

    上传文件部分代码: /// <summary> /// 上传保存文件并返回文件的保存地址和文件名称 /// </summary> /// <param name=&quo ...

  6. ASP.NET上传文件的几种方法

      //上传文件实例 if (fileDealer.HasFile)//判断文件是否存在        {            string filepath = "";     ...

  7. Asp.Net_上传文件(ftp、webClient、webService)

    第一种:通过FTP来上传文件 首先,在另外一台服务器上设置好FTP服务,并创建好允许上传的用户和密码,然后,在ASP.NET里就可以直接将文件上传到这台 FTP 服务器上了.代码如下: <%@ ...

  8. 朋友封装的一个ASP.NET上传文件的方法

    朋友做了asp.net开发多年,做了这个,自我感觉封装得还不错!!! 代码如下: #region 上传文件的方法 /// <summary> /// 上传文件方法 /// </sum ...

  9. asp.net 上传文件超过了最大请求长度

    今天系统遇到了一个问题,上传4m以上的文件,uploadify就会报错:超过了最大请求长度. 开始我以为是设置的大小,可是后来我看了uploadify的fileSizeLimit=1024*10,也就 ...

随机推荐

  1. uniapp vue 购车计算器,贷款计算器,保险计算器

    基于vue开发的买车计算器,支持uniapp 概述 项目为工作中开发,感觉比较有意思,而且能够帮助其他人快速开发功能,我就发上来了,大佬勿喷吧,没什么技术含量! uniapp打包多端[小程序类]可能会 ...

  2. cookie的理解

    第一:每个特定的域名下最多生成20个cookie IE6或更低版本最多20个cookie IE7和之后的版本最多可以有50个cookie Firefox最多50个cookie chrome和Safar ...

  3. 题解-The Number of Good Intervals

    题面 The Number of Good Intervals 给定 \(n\) 和 \(a_i(1\le i\le n)\),\(m\) 和 \(b_j(1\le j\le m)\),求对于每个 \ ...

  4. redis学习之——Redis事务(transactions)

    Redis事务:可以一次执行多个命令,本质是一组命令的集合.一个事务中的,所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 常用命令:MULTI  开启事务  EXEC 提交事务 ...

  5. 通过游戏学javascript系列第一节Canvas游戏开发基础

    本节教程通过一个简单的游戏小例子,讲解Canvas的基础知识. 最终效果: 点击移动的方块,方块上的分数会增加,方块的行进方向会改变,并且方块的速度会增加. 在线演示 源码 HTML5引入了canva ...

  6. Docker安装rocketmq踩坑指南

    Docker 网络 Docker容器运行的时候有host.bridge.none三种网络可供配置. 默认是bridge,即桥接网络,以桥接模式连接到宿主机:host是宿主网络,即与宿主机共用网络:no ...

  7. 通过Spring profile方式实现多环境部署

    1 多环境部署 在实际软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行.例如,各个环境数据库地址不同,需要单独配置.spring高级装备中提供profile,来支持多环境部署. 1.1 ...

  8. 搞定MySQL安装难安装贵问题

    背景 本方案解决了windows下安装MySQL过程繁琐的问题. 是真正的免安装绿色方法,不用配环境变量,不用执行install命令,不用配置my.ini文件. 步骤 下载 下载mysql-8.0.2 ...

  9. css样式规则

    在css样式规则中: 1.选择器用于指定CSS样式作用的HTML对象,花括号内是对该对象设置的具体样式. 2.属性和属性值以"键值对"的形式出现. 3.属性是对指定的对象设置的样式 ...

  10. 配置OSPF与BFD联动

    组网图形 OSPF与BFD联动简介 双向转发检测BFD(Bidirectional Forwarding Detection)是一种用于检测转发引擎之间通信故障的检测机制.BFD对两个系统间的.同一路 ...