web api 如何通过接收文件流的方式,接收客户端及前端上传的文件

from:https://www.cnblogs.com/refuge/p/8534847.html

 

服务端接收文件代码:

 

public async Task<HttpResponseMessage> ReceiveFileByStream()

 

        {
            var stream = HttpContext.Current.Request.InputStream;
            if (stream.Length > 0)
            {
                var absolutePath = HttpContext.Current.Request.MapPath("/img/");
                if (!Directory.Exists(absolutePath))
                {
                    Directory.CreateDirectory(absolutePath);
                }
                var fileType = "";
                var bytes = new byte[stream.Length];
                stream.Read(bytes,bytes.Length);
                //前两个字节代表文件类型,这里以 JPG 类型为例
                var bs = bytes[0].ToString() + bytes[1].ToString();
                if (bs.Equals("255216"))
                {
                    fileType = ".jpg";
                }
                var path = absolutePath + Guid.NewGuid() + fileType;
                await Task.Run(() =>
                {
                    using (FileStream fs = new FileStream(path,FileMode.Create,FileAccess.Write))
                    {
                        fs.Write(bytes,bytes.Length);
                    }
                });
                return Request.CreateResponse(HttpStatusCode.OK,"上传成功!");
            }
            else
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest,"没有文件耶,哥们!");
            }
        }

 

 

客户端上传文件代码:

 

static string TestHttpClientUpload()
        {
            var resultStr = string.Empty;
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://192.168.20.15:57895");
            string apiUrl = "api/upload/ReceiveFileByStream";
            string path = @"C:\Users\xxxx\Desktop\woman.jpg";
            FileStream fs = new FileStream(path,FileMode.Open,FileAccess.Read);
            HttpContent content = new StreamContent(fs);
            var result = client.PostAsync(apiUrl,content).Result;
            fs.dispose();
            resultStr = result.Content.ReadAsstringAsync().Result;
            return resultStr;//上传成功
        }

 

 HttpWebRequest:

static string TestHttpWebRequestUpload()
        {
            var resultStr = string.Empty;
            string url = "http://192.168.20.15:57895/api/upload/ReceiveFileByStream";
            HttpWebRequest request = WebRequest.CreateHttp(url);
            request.Method = "post";
            string path = @"C:\Users\xxxx\Desktop\woman.jpg";
            FileStream fs = new FileStream(path,FileAccess.Read);
            var requestStream = request.GetRequestStream();
            fs.copyTo(requestStream);
            fs.dispose();
            requestStream.dispose();
            var result = request.GetResponseAsync().Result;
            var responseStream = result.GetResponseStream();
            using (StreamReader sm = new StreamReader(responseStream))
            {
                resultStr = sm.ReadToEnd();
            }
            return resultStr;//上传成功
        }

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些