• 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端代码就不多说了  我也不会  嘿嘿

  • 相关阅读:
    Docker的安装和scrapy-splash的安装
    scrapyd打包到服务器运行
    一些python的简单有用方法
    NFS学习
    apache配置https加密传输
    httpd基于域名不同的虚拟主机配置
    Openssl创建私有CA
    NODEJS版本控制和切换
    HyperV使用Centos系统安装FTP服务
    装Anaconda报错This Python interpreter is in a conda environment, but the environment has not been activated. Libraries may fail to load. To activate this environment please see http://conda.io/activation
  • 原文地址:https://www.cnblogs.com/wuchaofan1993/p/7144659.html
Copyright © 2020-2023  润新知