Android调用webservice上传文件
工作中遇到了webservice上传文件的情况,起初只是上传图片,由于图片的内存较小,故可以直接将图片转换为base64编码的字符串,具体代码如下
// imageName为图片的base64编码字符串,strFileName为图片的上传路径
MemoryStream stream = new MemoryStream(Convert.FromBase64String(imageName)); Bitmap bitmap = (Bitmap)Image.FromStream(stream); bitmap.Save(strFileName, ImageFormat.Png);
后面由于工作需要,需添加上传视频的功能,但是由于视频的内存空间可能比较大,当使用base64编码时,字符串接收会超出有效长度,故只能采用form表单的形式上传,android端使用了表单的形式上传文件,接口中无法直接传入参数,需使用接口中代码如下
HttpContext.Current.Request.Params["strDbid"].ToString()来获取相应的参数,然后做进一步操作
string strDbid = HttpContext.Current.Request.Params["strDbid"].ToString();//这里如果前台没有用jsonp,那么获取到的是一个?,所以处理完之后,前台是没法获取到服务器返回的内容的。 //上面代码必须,不能注释 //中间代码执行自己的业务操作,可返回自己的任意信息(多数据类型) HttpFileCollection files = HttpContext.Current.Request.Files;
//string strFileName = HttpContext.Current.Request["filename"];获取文件名称 byte[] b = new byte[files[0].ContentLength]; System.IO.Stream fs = (System.IO.Stream)files[0].InputStream; fs.Read(b, 0, files[0].ContentLength); ///定义并实例化一个内存流,以存放提交上来的字节数组。 MemoryStream m = new MemoryStream(b); ///生成文件名称 string str = DateTime.Now.ToString("yyyyMM"); string str2 = DateTime.Now.ToString("yyyyMMdd"); string path = this.strImageWebUrl + @"\uploads\C" + strDbid; string str5 = this.strImageWebUrl + @"\uploads\C" + strDbid; if (!Directory.Exists(path + @"\movs\" + str)) { Directory.CreateDirectory(path + @"\movs\" + str); } path = path + @"\movs\" + str; if (!Directory.Exists(path + @"\" + str2)) { Directory.CreateDirectory(path + @"\" + str2); } path = path + @"\" + str2; int num = new Random().Next(0x2710); string str6 = DateTime.Now.ToString("yyyyMMddHHmmss") + num.ToString() + Guid.NewGuid().ToString() + ".mp4"; string filename = path + @"\" + str6;//文件物理路径
//FileStream f = new FileStream(Server.MapPath("\\UploadFile") + "\\" + files[0].FileName, FileMode.Create);
FileStream f = new FileStream(filename, FileMode.Create); ///把内内存里的数据写入物理文件 m.WriteTo(f); m.Close(); f.Close(); f = null; m = null;
android端代码就不多说了 我也不会 嘿嘿