WPF Upload

WPF 图片上传(同步)

private void btnStart_Click(object sender, RoutedEventArgs e)
{
    UpLoadFile("http://127.0.0.1:8090/api/upload.file", "D:/file/defaultfrg.png");
}
private void UpLoadFile(string uriString, string filePath)
{
    //文件名
    string fileName = System.IO.Path.GetFileName(filePath);
    //文件格式
    string fileExt = filePath.Substring(filePath.LastIndexOf(".") + 1);

    WebClient client = new WebClient();
    client.Credentials = CredentialCache.DefaultCredentials;
    client.Headers.Add("Content-Type", "application/form-data");
    client.QueryString["fname"] = fileName;
    byte[] fileb = client.UploadFile(new Uri(uriString), "POST", filePath);
    string res = Encoding.UTF8.GetString(fileb);
    MessageBox.Show(res);
}

WPF图片上传(异步) 

private void btnStart_Click(object sender, RoutedEventArgs e)
{
    UpLoadFileAsyn("http://127.0.0.1:8090/api/upload.file", "D:/file/defaultfrg.png");
}
private void UpLoadFileAsync(string uriString, string filePath)
{
    //文件名
    string fileName = System.IO.Path.GetFileName(filePath);
    //文件格式
    string fileExt = filePath.Substring(filePath.LastIndexOf(".") + 1);

    WebClient client = new WebClient();
    //定义事件,上传成功事件和上传进度事件
    client.UploadFileCompleted += client_UploadFileCompleted;
    client.UploadProgressChanged += client_UploadProgressChanged;

    client.Credentials = CredentialCache.DefaultCredentials;
    client.Headers.Add("Content-Type", "application/form-data");//注意头部必须是form-data
    client.QueryString["fname"] = fileName;
    //异步上传,通过事件回调获取运行状态
    client.UploadFileAsync(new Uri(uriString), "POST", filePath);
}
//上传进度事件,修改进度条
void client_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
    progressBar.Minimum = 0;
    progressBar.Maximum = (int)e.TotalBytesToSend;
    progressBar.Value = (int)e.BytesSent;
}

//上传完成事件,判断是否上传成功
void client_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)
{
            
    if (e.Error == null)
    {
        progressBar.Value = progressBar.Maximum;
        Thread.Sleep(500);
        progressBar.Visibility = Visibility.Collapsed;
    }
    else
    {
        MessageBox.Show("上传错误:" + e.Error.Message);
    }
}

注意:Header的Content-Type必须设置为 application/form-data 

 

WebApi接收图片

[RoutePrefix("api")]
public class UploadController : ApiController
{
    /// <summary>
    /// Content-Type:application/octet-stream
    /// </summary>
    [HttpPut,Route("upload.binary")]
    public string UploadBinary(HttpPostedFileBase file)
    {
        //保存文件到根目录 App_Data + 获取文件名称和格式
        var filePath = HttpContext.Current.Server.MapPath("~/App_Data/") + HttpContext.Current.Request.Form["fileName"];
        using (FileStream fs = new FileStream(filePath, FileMode.Append, FileAccess.Write))
        {
            using (BinaryWriter bw = new BinaryWriter(fs))
            {
                //读取文件流
                BinaryReader br = new BinaryReader(HttpContext.Current.Request.Files[0].InputStream);
                //将文件留转成字节数组
                byte[] bytes = br.ReadBytes((int)HttpContext.Current.Request.Files[0].InputStream.Length);
                //将字节数组追加到文件
                bw.Write(bytes);
            }
        }
        return "1";
    }
    /// <summary>
    /// Content-Type:application/form-data
    /// </summary>
    [HttpPost, Route("upload.file")]
    public string UploadFile()
    {
        var request = HttpContext.Current.Request;
        if (request.Files.Count > 0)
        {
            HttpPostedFile file = request.Files.Get(0);
            file.SaveAs(System.IO.Path.Combine("D:", file.FileName));
        }
        return "1";
    }
}

  

WebApi Config 设置大文件上传

<configuration>  
  <system.web>
    <httpRuntime targetFramework="4.5" maxRequestLength="2147483647" />    
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2147483647"/>
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>

  

https://my.oschina.net/u/4321531/blog/3485112

posted @ 2021-06-29 02:47  microsoft-zhcn  阅读(226)  评论(0编辑  收藏  举报