/// <summary>
/// WebClient上传文件至服务器
/// </summary>
/// <param name="localFilePath">文件名,全路径格式</param>
/// <param name="serverFolder">服务器文件夹路径</param>
/// <returns></returns>
public bool Upload(string localFilePath, out string folderName,string newFileName)
{
//先创建文件夹
folderName = "";
try
{
Guid guid = Guid.NewGuid();
folderName = guid.ToString();
string diskPath = DAL.DataBaseOperator.GetValueFromApplictionConfig("diskPath");
if (!diskPath.EndsWith("/") && !diskPath.EndsWith(@"\"))
{
diskPath = diskPath + "/";
}
diskPath += folderName;
if (!Directory.Exists(diskPath))
{
//服务器创建文件夹
Directory.CreateDirectory(diskPath);
}
//再上传数据
string serverFolder = DAL.DataBaseOperator.GetValueFromApplictionConfig("uploadPath");
if (!serverFolder.EndsWith("/") && !serverFolder.EndsWith(@"\"))
{
serverFolder = serverFolder + "/";
}
string uriString = serverFolder + folderName + "/" + newFileName;
/// 创建WebClient实例
WebClient myWebClient = new WebClient();
myWebClient.Credentials = CredentialCache.DefaultCredentials;
// 要上传的文件
FileStream fs = new FileStream(newFileName, FileMode.Open, FileAccess.Read);
//判断文件大小
string strFileSize = DAL.DataBaseOperator.GetValueFromApplictionConfig("fileSize");
int fileSize = Convert.ToInt32(strFileSize) * 1024 * 1024;
if (fs.Length > fileSize)
{
MessageBox.Show("您上传的附件不能超过 " + strFileSize + "M");
return false;
}
BinaryReader r = new BinaryReader(fs);
//使用UploadFile方法可以用下面的格式
myWebClient.UploadFile(uriString,"PUT",localFilePath);
byte[] postArray = r.ReadBytes((int)fs.Length);
Stream postStream = myWebClient.OpenWrite(uriString, "PUT");
if (postStream.CanWrite)
{
postStream.Write(postArray, 0, postArray.Length);
}
else
{
MessageBox.Show("文件目前不可写!");
}
Application.DoEvents();
postStream.Close();
}
catch(Exception err)
{
//MessageBox.Show("文件上传失败,请稍候重试~");
DAL.Log.FileLogSys.FileLog.WriteLog(err.Message + err.StackTrace);
return false;
}
return true;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构