博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#实现HTTP请求文件下载,GET、POST请求的数据流接收
阅读量:6093 次
发布时间:2019-06-20

本文共 2425 字,大约阅读时间需要 8 分钟。

做项目的时候由于插件Phaser请求audio的时候,不允许跨域,具体提示====》
已拦截跨源请求:同源策略禁止读取位于 http://ttyouni.com/1.mp3 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。
幸亏只是音乐,要是图片也不允许跨域,就麻烦了。因为以前一直使用图片上传,所以代码也是参照着那里写的,结果,拿到的文件一直是损坏的。
其中看到stream的Length的显示是出现异常,虽然知道是因为网络数据流读取的问题,但是怎么写还是不清楚。
C++的buffer写法倒是会,但是C#的一直没写过。网上搜,关键词一直不对,搜了老久的c#网络请求数据流接收,没有一个有用。
哦,后来搜到个streamreader,可惜人家写的接收类型是string...还是╮(╯﹏╰)╭不会。最后,还是老大出马,拿了个网上的参考地址。
最后才写好的,总觉得一把辛酸泪。

 

参考的地址:

 

1 public string CopyFileByUrl(string url) 2         { 3             string name = url.Substring(url.LastIndexOf('/') + 1);//获取名字 4             string fileFolder = UploadConfigContext.UploadPath; 5             string filePath = Path.Combine(fileFolder, name);//存放地址就是本地的upload下的同名的文件 6             if (!Directory.Exists(fileFolder)) 7                 Directory.CreateDirectory(fileFolder); 8  9             string returnPath = GetSimplePath(filePath);//需要返回的路径10             if (File.Exists(filePath))11             {
//如果已经存在,那么就不需要拷贝了,如果没有,那么就进行拷贝12 return returnPath;13 }14 HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;15 request.Method = "GET";16 request.ProtocolVersion = new Version(1, 1);17 HttpWebResponse response = request.GetResponse() as HttpWebResponse;18 if (response.StatusCode == HttpStatusCode.NotFound)19 {20 return string.Empty;//找不到则直接返回null21 }22 // 转换为byte类型23 System.IO.Stream stream = response.GetResponseStream();24 25 26 //创建本地文件写入流27 Stream fs = new FileStream(filePath, FileMode.Create);28 byte[] bArr = new byte[1024];29 int size = stream.Read(bArr, 0, (int)bArr.Length);30 while (size > 0)31 {32 fs.Write(bArr, 0, size);33 size = stream.Read(bArr, 0, (int)bArr.Length);34 }35 fs.Close();36 stream.Close();37 return returnPath;38 }
Copy代码

 

 

 

public string GetSimplePath(string path)        {            //E:\Upload\cms\day_150813\1.jpg            path = path.Replace(@"\", "/");            int pos = path.IndexOf("Upload");            if (pos != -1)            {                pos = pos - 1;//拿到前面那个/,这样为绝对路径,直接保存在整个项目下的upload文件夹下                return path.Substring(pos, path.Length - pos);            }            return "";        }

 

转载地址:http://gbmwa.baihongyu.com/

你可能感兴趣的文章
《Maven官方文档》创建Archetype
查看>>
MaxCompute 学习计划(三)
查看>>
Hadoop YARN学习之重要术语总结(6)
查看>>
PHP7扩展开发之数组处理
查看>>
RESTEasy中的通用异常处理ExceptionMapper
查看>>
性价比神器!99元一年的阿里云256MB高性能Redis性能测试及应用介绍
查看>>
CLI+Terraform简化资源管理的模板编写
查看>>
SQL Server · 特性分析 · 2012列存储索引技术
查看>>
一个锁等待现象的诊断案例
查看>>
C# 命令模式
查看>>
有序数组中找中位数
查看>>
JAVA数据库连接的另一种实现及简单的数据插入及显示
查看>>
阿里云Windows 自动扩容分区脚本
查看>>
[数据结构] 栈
查看>>
指针怎么用
查看>>
【IOS-COCOS2D游戏开发之十三】CCSPRITE利用BEZIER(贝塞尔)做抛物线动作并让CCSPRITE同时播放两个ACTION动作!...
查看>>
Android 文件存放路径【转】
查看>>
CPU GPU设计工作原理《转》
查看>>
[MySQL 5.6 ] Performance Schema学习:命名规范、状态变量及其他(2)
查看>>
mybatis性能优化二之多对多查询:用一次请求解决n次请求查询
查看>>