C# 上传文件到指定服务器

本文介绍如何使用WebClient组件上传文件到服务器的方法,并提供了自动重命名的功能选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  /// <summary>  
        /// WebClient上传文件至服务器,默认不自动改名  
        /// </summary>  
        /// <param name="fileNamePath">文件名,全路径格式</param>  
        /// <param name="uriString">服务器文件夹路径</param>  
        public void UpLoadFile(string fileNamePath, string uriString)
        {
            UpLoadFile(fileNamePath, uriString, false);
        }
        /// <summary>  
        /// WebClient上传文件至服务器  
        /// </summary>  
        /// <param name="fileNamePath">文件名,全路径格式</param>  
        /// <param name="uriString">服务器文件夹路径</param>  
        /// <param name="IsAutoRename">是否自动按照时间重命名</param>  
        public void UpLoadFile(string fileNamePath, string uriString, bool IsAutoRename)
        {
            string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf("\\") + 1);
            string NewFileName = fileName;
            if (IsAutoRename)
            {
                NewFileName = DateTime.Now.ToString("yyMMddhhmmss") + DateTime.Now.Millisecond.ToString() + fileNamePath.Substring(fileNamePath.LastIndexOf("."));
            }

            string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1);
            if (uriString.EndsWith("/") == false) uriString = uriString + "/";
            if (!Directory.Exists(uriString))//如果不存在就创建file文件夹
            {
                Directory.CreateDirectory(uriString);
            }
            uriString = uriString + NewFileName;
            /**/
            /// 创建WebClient实例  
            System.Net.WebClient myWebClient = new WebClient();

            myWebClient.Credentials = new NetworkCredential("10.1.31.218", "0.");

           // myWebClient.Credentials = CredentialCache.DefaultCredentials;
            // 要上传的文件  
            FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
            BinaryReader r = new BinaryReader(fs);
            byte[] postArray = r.ReadBytes((int)fs.Length);

            Stream postStream = myWebClient.OpenWrite(uriString, "PUT");
            try
            {
                //使用UploadFile方法可以用下面的格式  
                if (postStream.CanWrite)
                {
                    postStream.Write(postArray, 0, postArray.Length);
                    postStream.Close();
                    fs.Dispose();
                    //  log.AddLog("上传日志文件成功!", "Log");
                    //  basicInfo.writeLogger("上传日志文件成功!" );
                }
                else
                {
                    postStream.Close();
                    fs.Dispose();
                }
            }
            catch (Exception err)
            {
                postStream.Close();
                fs.Dispose();
                throw err;
            }
            finally
            {
                postStream.Close();
                fs.Dispose();
            }
        }
    
C# Windows 窗体应用程序中,上传文件服务器的特定位置通常涉及到文件操作、网络通信和HTTP请求。以下是基本步骤: 1. **准备文件路径**: 获取用户选择要上传文件,通常通过`OpenFileDialog`控件实现。 ```csharp string filePath = openFileDialog.FileName; ``` 2. **建立连接**: 使用 `HttpClient` 或者 `WebClient` 类创建一个 HTTP 客户端,用于发送数据到服务器。 ```csharp using (HttpClient httpClient = new HttpClient()) { // 设置POST请求头,如果需要身份验证,添加相应的认证信息 httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "your_token"); } ``` 3. **构造POST请求**: 创建一个包含文件数据的 `FormDataContent` 对象,然后设置URL和方法。 ```csharp MultipartFormDataContent formContent = new MultipartFormDataContent(); formContent.Add(new StreamContent(File.OpenRead(filePath)), "file", Path.GetFileName(filePath)); Uri uploadUrl = new Uri("http://example.com/upload"); // 替换为你服务器的地址 HttpResponseMessage response = await httpClient.PostAsync(uploadUrl, formContent); ``` 4. **处理响应**: 检查响应状态码,通常成功情况下的状态码是200,然后根据需要读取响应内容。 5. **异常处理**: 添加适当的错误处理和日志记录机制,以应对可能出现的网络错误或文件读取错误。 6. **释放资源**: 在完成操作后记得关闭连接和清理资源。 ```csharp response.EnsureSuccessStatusCode(); // 可能的操作,如保存响应内容到数据库或文件等 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值