WebApi和Andriod对接上传和下载文件
我在实现webapi和Andriod客户端上传下载文件的时候默认的是以流的形式返回的,下面我就贴出最近在研究的对接文件的上传和下载代码以供各位大侠们参考:
上传文件接口:
[HttpPost]
public async Task<HttpResponseMessage> PostReplayInfo()
{ //HttpPostedFile file = HttpContext.Current.Request.Files[0];
if (!Request.Content.IsMimeMultipartContent("form-data"))
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
HttpResponseMessage response = null; //string strPath = "F:\\项目\\\\" + file.FileName;
try
{
// 设置上传目录
var provider = new MultipartFormDataStreamProvider(@"F:\\项目");
// 接收数据,并保存文件
var bodyparts = await Request.Content.ReadAsMultipartAsync(provider);
response = Request.CreateResponse(HttpStatusCode.Accepted); string str = "";
msgCont msgcont=new msgCont();
if (provider.FileData.Count > )
{
var file = provider.FileData[];//provider.FormData
FileInfo fileinfo = new FileInfo(file.LocalFileName); string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');
msgcont.Accessory = orfilename;
msgcont.AccessoryID = file.LocalFileName.Substring(file.LocalFileName.LastIndexOf("\\") + );
} foreach (var key in provider.FormData.AllKeys)
{//接收FormData str =provider.FormData["requestData"].ToString();
}
StringBuilder strSql = new StringBuilder();
JSONObject json = JSONConvert.DeserializeObject(str);
msgcont.MsgPersonID = int.Parse(json["MsgPersonID"].ToString());
msgcont.Title = json["Title"].ToString();
msgcont.SendDate = DateTime.Now;
msgcont.Status = ;
msgcont.Content = json["Content"].ToString();
msgcont.SendTo = json["SendTo"].ToString();
msgcont.SendToID = json["SendToID"].ToString();
msgcont.ReplayId = int.Parse(json["MessageID"].ToString());
msgcont.ProjectID = int.Parse(json["ProjectID"].ToString());
// msgcont.Accessory = orfilename;
db.msgCont.Add(msgcont);
db.SaveChanges(); string s = "{\"code\":\"1\",\"messge\":\"成功\"}";
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(s, Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
}
catch (Exception ex)
{
string s = "{\"code\":\"0\",\"messge\":\"失败," + ex.Message + "\"}";
HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(s, Encoding.GetEncoding("UTF-8"), "application/json") };
return result;
} }
这是一个上传文件并将记录插入到对应的数据库的列子,Andriod客户端传过来的时一个MultiplePart的形式,所以在webapi服务器端获取数据的时候需要将参数进行分解,获取到对应的文件流形式之后。
文件下载接口:
/// <summary>
/// 文件下载
/// </summary>
/// <param name="filePath "></param>
/// <returns></returns>
[HttpGet]
public HttpResponseMessage GetDownLoad(string requestData)
{ StringBuilder strSql = new StringBuilder();
JSONObject json = JSONConvert.DeserializeObject(requestData);
string LastName = System.IO.Path.GetExtension(json["fileName"].ToString());
string customFileName = DateTime.Now.ToString("yyyyMMddHHmmss") + LastName; string filePath = "F:\\项目\\"+json["fileName"].ToString();
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new StreamContent(fileStream);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = customFileName;
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); // 这句话要告诉浏览器要下载文件
response.Content.Headers.ContentLength = new FileInfo(filePath).Length;
return response;
}
在获取到从客户端传过来的文件名之后,访问服务器端文件,并以流的形式返回给Andriod客户端。
WebApi和Andriod对接上传和下载文件的更多相关文章
- WebApi使用二进制方式上传和下载文件
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; usi ...
- SecureCRT上传和下载文件
SecureCRT上传和下载文件(下载默认目录) SecureCR 下的文件传输协议有ASCII .Xmodem .Ymodem .Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. ...
- 11、只允许在主目录下上传和下载文件,不允许用putty登录
创建用户xiao, 使其只允许在用户主目录 (/var/www/html)下上传和下载文件,不允许用putty登录 (为了安全起见,不给过多的权限) 1.创建xiao用户 [root@localh ...
- 每天一个linux命令(26):用SecureCRT来上传和下载文件
用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...
- 利用SecureCRT上传、下载文件(使用sz与rz命令),超实用!
利用SecureCRT上传.下载文件(使用sz与rz命令),超实用! 文章来源:http://blog.csdn.net/dongqinliuzi/article/details/39623169 借 ...
- Linux--用SecureCRT来上传和下载文件
SecureCRT下的文件传输协议有以下几种:ASCII.Xmodem.Ymodem.Zmodem ASCII:这是最快的传输协议,但只能传送文本文件. Xmodem:这种古老的传输协议速度较慢,但由 ...
- secureCRT简单上传、下载文件记录
secureCRT简单上传.下载文件记录: 1)sz下载 -y 覆盖 2)rz上传 -y 覆盖 3)以上两个命令属于安装时包含在“Dial-up Networking Support"组中 ...
- 每天一个linux命令(26)--用SecureCRT来上传和下载文件
用SSH管理Linux 服务器时经常需要远程与本地之间交互文件,而直接使用 SecureCRT 自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmod ...
- 每天一个linux命令(26):用SecureCRT来上传和下载文件(转载自竹子)
用SSH管理linux服务器时经常需要远程与本地之间交互文件.而直接用SecureCRT自带的上传下载功能无疑是最方便的,SecureCRT下的文件传输协议有ASCII.Xmodem.Zmodem. ...
随机推荐
- 【Raspberry Pi】USB无线网卡自动连接
Raspberry Pi 使用USB无线网卡的时候不会因为路由重启而掉线. #!/bin/bash while true ; do if ifconfig wlan0 | grep -q " ...
- VirtualBox安装Ubuntu搭建js环境的注意事项
1.使用CPU-Z工具检查主板是否支持虚拟技术,因为VirtulBox虚拟机需要主板支持虚拟技术 2.Ubuntu安装之后重启会出现:please remove this install medium ...
- watch和computed的用法区别是什么?
在模板中绑定表达式是非常便利的,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么 Vue.js 将绑定表达式限制为一个表达式.如果需 ...
- CSS3 文本超出后显示省略号...
纯用CSS实现,主要采用代码 overflow:hidden; text-overflow:ellipsis;//这是让文本溢出后,显示成省略号. white-space:nowrap;//禁止自动换 ...
- 【HTML5】HTML5 WebSocket简介以及简单示例
互联网发展到现在,早已超越了原始的初衷,人类从来没有像现在这样依赖过他:也正是这种依赖,促进了互联网技术的飞速发展.而终端设备的创新与发展,更加速了互联网的进化: HTTP/1.1规范发布于1999年 ...
- phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接
phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接--解决方法 phpMyAdmin 尝试连接到 MySQL 服务器,但服务器拒绝连接.您应该检查配置文件中的主机.用户名和 ...
- Spring AOP的使用报错!
用构造方法注入的时候 需要把无参构造方法手动加上 AOP底层会调用无参构造方法. 不加则报错:Superclass has no null constructors but no arguments ...
- ubuntu16 jdk7 install&config
1,下载jdk文件 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521 ...
- MySQL 大表在线DML神器--pt-online-schema-change
一个朋友问我在线对大表进行ddl操作,如何做能尽量避免主从延迟以及不影响在线dml操作呢?我想到一个开源的pt-online-schema-change工具,测试了吧,效果还可以. pt-online ...
- 一个导出redis有序集合sorted-sets的shell脚本
通过keys匹配需要导出的有序集合名称,这些集合命名格式为:*_010_09/Dec/2015 依次通过zscan导出有序集合中的数据,并分别保存 #/bin/shzset_pattern=”*_01 ...