ASP.NET 上傳文件到共享文件夾的示例
更新時間:2021年04月13日 09:53:26 作者:大穩(wěn)·楊
這篇文章主要介紹了ASP.NET 上傳文件到共享文件夾的示例,幫助大家更好的理解和學(xué)習(xí)使用.net技術(shù),感興趣的朋友可以了解下
上傳文件代碼
web.config
<!--上傳文件配置,UploadPath值一定是服務(wù)器ip,內(nèi)網(wǎng)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>
/// 根據(jù)文件名(包含文件擴(kuò)展名)獲取要保存的文件夾名稱
/// </summary>
public class FileHelper
{
/// <summary>
/// 根據(jù)文件名(包含文件擴(kuò)展名)獲取要保存的文件夾名稱
/// </summary>
/// <param name="fileName">文件名(包含文件擴(kuò)展名)</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在文件末尾添加數(shù)據(jù)
tw.WriteLine($"----產(chǎn)生時間:{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 = "鏈接服務(wù)器失敗";
}
return ServiceResponse<UploadRespModel>.SuccessResponse(msg, viewModel, code);
}
/// <summary>
/// 連接遠(yuǎn)程共享文件夾
/// </summary>
/// <param name="path">遠(yuǎn)程共享文件夾的路徑</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>
/// 向遠(yuǎn)程文件夾保存本地內(nèi)容,或者從遠(yuǎn)程文件夾下載文件到本地
/// </summary>
/// <param name="inFileStream">要保存的文件的路徑,如果保存文件到共享文件夾,這個路徑就是本地文件路徑如:@"D:\1.avi"</param>
/// <param name="dst">保存文件的路徑,不含名稱及擴(kuò)展名</param>
/// <param name="fileName">保存文件的名稱以及擴(kuò)展名</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 上傳文件到共享文件夾的示例的詳細(xì)內(nèi)容,更多關(guān)于ASP.NET 上傳文件的資料請關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:
- ASP.NET 上傳文件導(dǎo)入Excel的示例
- asp.net core webapi文件上傳功能的實現(xiàn)
- ASP.NET Core單文件和多文件上傳并保存到服務(wù)端的方法
- asp.net利用ashx文件實現(xiàn)文件的上傳功能
- asp.net大文件上傳解決方案實例代碼
- asp.net上傳Excel文件并讀取數(shù)據(jù)的實現(xiàn)方法
- ASP.NET MVC實現(xiàn)批量文件上傳
- ASP.NET Core文件上傳與下載實例(多種上傳方式)
- 解決asp.net上傳文件超過了最大請求長度的問題
- ASP.NET MVC HttpPostedFileBase文件上傳的實例代碼
相關(guān)文章
ASP.NET MVC小結(jié)之基礎(chǔ)篇(一)
本文是ASP.NET MVC系列的第一篇文章,跟其他學(xué)習(xí)系列一樣,咱們先來點基礎(chǔ)知識,之后再循序漸進(jìn)。我們先從asp.net mvc的概念開始吧。2014-11-11
Asp.net控制Tomcat啟動關(guān)閉的實現(xiàn)方法
近日有個項目客戶要求能自己配置相關(guān)權(quán)限。由于歷史原因這個項目采用的是公司以前的權(quán)限系統(tǒng)2012-01-01
.NET運(yùn)行界面上,實現(xiàn)隨意拖動控件的方法
.NET運(yùn)行界面上,實現(xiàn)隨意拖動控件的方法,需要的朋友可以參考一下2013-03-03
.NET?Core使用SkiaSharp實現(xiàn)快速生成二維碼
這篇文章主要為大家詳細(xì)介紹了.NET?Core如何使用SkiaSharp實現(xiàn)快速生成二維碼,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
WebForm獲取checkbox選中的值(幾個簡單的示例)
WebForm中用checkbox的地方挺多的,下面寫了幾個簡單的例子,方便以后學(xué)習(xí)使用2014-07-07

