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 + @"uploadsC" + strDbid; string str5 = this.strImageWebUrl + @"uploadsC" + 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端代码就不多说了  我也不会  嘿嘿

原文地址:https://www.cnblogs.com/wuchaofan1993/p/7144659.html