通过WebClient模拟post上传文件到服务器

写在前面

最近一直在研究sharepoint的文档库,在上传文件到文档库的过程中,需要模拟post请求,也查找了几种模拟方式,webclient算是比较简单的方式。

一个例子

这里写一个简单接受post请求的aspx页面,代码如下:

 1 namespace Wolfy.UploadDemo
 2 {
 3     public partial class Default : System.Web.UI.Page
 4     {
 5         protected void Page_Load(object sender, EventArgs e)
 6         {
 7             string fileName = Request.QueryString["url"];
 8             if (!string.IsNullOrEmpty(fileName))
 9             {
10                 Stream st = Request.InputStream;
11                 string fileSavePath = Request.MapPath("~/upload/") + fileName;
12                 byte[] buffer=new byte[st.Length];
13                 st.Read(buffer, 0, buffer.Length);
14                 if (!File.Exists(fileSavePath))
15                 {
16                     File.WriteAllBytes(fileSavePath, buffer);
17                 }
18                
19             }
20         }
21     }
22 }

这里使用QueryString接收url参数,使用请求的输入流接受文件的数据。
然后,使用webclient写一个模拟请求的客户端,代码如下:

 1 namespace Wolfy.UploadExe
 2 {
 3     class Program
 4     {
 5         static void Main(string[] args)
 6         {
 7             WebClient client = new WebClient();
 8             client.QueryString.Add("url", "1.png");10             using (FileStream fs = new FileStream("1.png", FileMode.Open))
11             {
12                 byte[] buffer = new byte[fs.Length];
13                 fs.Read(buffer, 0, buffer.Length);
14                 client.UploadData("http://localhost:15887/Default.aspx", buffer);
15             }
16 
17         }
18     }
19 }

调试状态运行aspx,然后运行exe控制台程序

如果有验证信息,可以加上这样一句话:

1 client.Credentials = new NetworkCredential("用户名", "密码", "");

总结

由于目前做的项目,移动端app不能提供用户名和密码,必须使用证书进行认证,发现webclient无法支持。就采用HttpWebRequest类进行模拟了。关于它的使用是下文了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤在 C# 中使用 Web API 中转上传文件到文件服务器: 1. 创建一个 Web API 控制器来处理上请求,例如: ```csharp public class FileUploadController : ApiController { [HttpPost] public async Task<IHttpActionResult> Upload() { // 处理上请求 // ... } } ``` 2. 在上请求中,使用 `MultipartFormDataStreamProvider` 类来处理上的文件和表单数据。例如: ```csharp public async Task<IHttpActionResult> Upload() { // 验证上请求是否为 multipart/form-data if (!Request.Content.IsMimeMultipartContent()) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } // 设置文件上目录 var uploadPath = HttpContext.Current.Server.MapPath("~/Uploads"); // 处理上的文件和表单数据 var provider = new MultipartFormDataStreamProvider(uploadPath); await Request.Content.ReadAsMultipartAsync(provider); // 获取上的文件 var file = provider.FileData.FirstOrDefault(); // 将文件上到文件服务器 // ... } ``` 3. 使用 `WebClient` 类或其他 HTTP 客户端库将文件上到文件服务器。例如: ```csharp public async Task<IHttpActionResult> Upload() { // ... // 将文件上到文件服务器 var fileStream = File.OpenRead(file.LocalFileName); var client = new WebClient(); client.UploadFile("http://fileserver/upload", fileStream); // 删除上的临时文件 File.Delete(file.LocalFileName); return Ok(); } ``` 4. 在文件服务器上处理上的文件。例如,在 ASP.NET Core 中,可以使用 `IFormFile` 类来处理上的文件。例如: ```csharp [HttpPost("upload")] public async Task<IActionResult> Upload(IFormFile file) { if (file == null || file.Length == 0) { return BadRequest(); } // 保存上的文件 var filePath = Path.Combine(_hostingEnvironment.ContentRootPath, "uploads", file.FileName); using (var stream = new FileStream(filePath, FileMode.Create)) { await file.CopyToAsync(stream); } return Ok(); } ``` 以上是一个基本的上传文件的流程,具体的实现细节可以根据具体的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值