上面是上传结果的展示,下面具体讲一下实现过程。

一、Web Service (.NET)

  1. namespace VedioPlayerWebService.service.vedios
  2. {
  3. [WebService(Namespace = "http://tempuri.org/")]
  4. [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  5. [System.ComponentModel.ToolboxItem(false)]
  6. [System.Web.Script.Services.ScriptService]
  7. [SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]
  8. public class GetVedios : System.Web.Services.WebService
  9. {
  10. [WebMethod(EnableSession = true, Description = "上传文件")]
  11. public int FileUploadByBase64String(string base64string, string fileName1)
  12. {
  13. try
  14. {
  15. string fileName = "D:\\VedioPlayerWeb\\videos\\" + fileName1;
  16. // 取得文件夹
  17. string dir = fileName.Substring(0, fileName.LastIndexOf("\\"));
  18. //如果不存在文件夹,就创建文件夹
  19. if (!Directory.Exists(dir))
  20. Directory.CreateDirectory(dir);
  21. byte[] bytes = Convert.FromBase64String(base64string);
  22. MemoryStream memoryStream = new MemoryStream(bytes, 0, bytes.Length);
  23. memoryStream.Write(bytes, 0, bytes.Length);
  24. // 写入文件
  25. File.WriteAllBytes(fileName, memoryStream.ToArray());
  26. if (File.Exists(fileName))
  27. {
  28. FileStream fsSource = new FileStream(fileName, FileMode.Open, FileAccess.Read);
  29. fsSource.Close();
  30. }
  31. //返回数据如果是1,上传成功!
  32. return 1;
  33. }
  34. catch (Exception ex)
  35. {
  36. //返回如果是-1,上传失败
  37. return -1;
  38. }
  39. }
  40.  
  41. }
  42. }

二、工具类(Android)

1、将要上传的文件转换成经过处理的Base64字符串

  1. /**
  2. *得到经过处理的Base64字符串
  3. * Created by WFZ on 2015/12/7.
  4. */
  5. public class Base64Util {
  6. public static String getBase64String(String path) {
  7. byte[] byteArray = null;
  8. byteArray = Fileutil.readFileToByteArray(new File(path));
  9. String strBase64 = new String(Base64.encode(byteArray,0));
  10. return strBase64;
  11. }
  12. }

2、读取文件的工具类

  1. import java.io.ByteArrayOutputStream;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;
  6. /**
  7. * 读取文件的工具类
  8. * Created by WFZ on 2015/12/7.
  9. */
  10. public class Fileutil {
  11. public static byte[] readFileToByteArray(File file) {
  12. FileInputStream fileInputStream = null;
  13. ByteArrayOutputStream byteArrayOutputStream = null;
  14. try {
  15. fileInputStream = new FileInputStream(file);
  16. byteArrayOutputStream = new ByteArrayOutputStream();
  17. byte[] bt = new byte[1024];
  18. int len = 0;
  19. while ((len = fileInputStream.read(bt)) != -1) {
  20. byteArrayOutputStream.write(bt, 0, len);
  21. }
  22. return byteArrayOutputStream.toByteArray();
  23. } catch (FileNotFoundException e) {
  24. // TODO Auto-generated catch block
  25. e.printStackTrace();
  26. } catch (IOException e) {
  27. // TODO Auto-generated catch block
  28. e.printStackTrace();
  29. } finally {
  30. if (fileInputStream != null) {
  31. try {
  32. fileInputStream.close();
  33. } catch (IOException e) {
  34. // TODO Auto-generated catch block
  35. e.printStackTrace();
  36. }
  37. }
  38. if (byteArrayOutputStream != null) {
  39. try {
  40. byteArrayOutputStream.close();
  41. } catch (IOException e) {
  42. // TODO Auto-generated catch block
  43. e.printStackTrace();
  44. }
  45. }
  46. }
  47. return null;
  48. }
  49. }

3、上传文件的工具类,这里需要soap的jar包

  1. import org.ksoap2.SoapEnvelope;
  2. import org.ksoap2.serialization.SoapObject;
  3. import org.ksoap2.serialization.SoapSerializationEnvelope;
  4. import org.ksoap2.transport.HttpTransportSE;
  5.  
  6. /**
  7. *
  8. * Created by WFZ on 2015/12/7.
  9. */
  10. public class QueryUploadUtil {
  11. private String filename, base64string;
  12.  
  13. public QueryUploadUtil(String base64str, String fileName) {
  14. this.filename = fileName;
  15. this.base64string = base64str;
  16. }
  17. // 需要实现Callable的Call方法
  18. public String call(String wsdl,String url) throws Exception {
  19. String str = "上传失败";
  20. // TODO Auto-generated method stub
  21. try {
  22. //创建SoapObject对象,并指定WebService的命名空间和调用的方法名
  23. SoapObject rpc = new SoapObject("http://tempuri.org/",
  24. "FileUploadByBase64String");
  25. //设置WebService方法的参数
  26. rpc.addProperty("base64string", base64string);
  27. rpc.addProperty("fileName1", filename);
  28. //第3步:创建SoapSerializationEnvelope对象,并指定WebService的版本
  29. SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
  30. SoapEnvelope.VER11);
  31. // 设置bodyOut属性
  32. envelope.bodyOut = rpc;
  33. envelope.dotNet = true;
  34. envelope.setOutputSoapObject(rpc);
  35. //创建HttpTransportSE对象,并指定WSDL文档的URL
  36. /**
  37. * 创建WSDL文档有三种方法:
  38. * 在.NET中有三种方式生成WSDL:
  39. * 1.在Web Service的URL后面加上WDSL需求,如下:
  40. * http://localhost/webExamples/simpleService.asmx?WSDL
  41. * 2.使用disco.exe。在命令行中写下如下的命令:
  42. * disco http://localhost/webExamples/simpleService.asmx
  43. *3.使用System.Web.Services.Description命名空间下提供的类
  44. * */
  45. HttpTransportSE ht = new HttpTransportSE(wsdl);
  46. ht.debug = false;
  47. //调用WebService
  48. ht.call(url, envelope);
  49. //使用getResponse方法获得WebService方法的返回结果
  50. String result = String.valueOf(envelope.getResponse());
  51. //这个地方是我自己设置的从webservice返回的结果,“1”表示上传成功。
  52. if (result.toString().equals("1"))
  53. str = "上传成功";
  54. } catch (Exception e) {
  55. // TODO Auto-generated catch block
  56. e.printStackTrace();
  57. str = "上传错误";
  58. }
  59. return str;
  60. }
  61. }

三、布局文件

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical"
  5. tools:context=".MainActivity">
  6. <TextView
  7. android:id="@+id/tv1"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content" />
  10. <TextView
  11. android:id="@+id/tv2"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content" />
  14. <Button
  15. android:id="@+id/btn"
  16. android:layout_width="match_parent"
  17. android:text="上传"
  18. android:layout_height="wrap_content" />
  19. <ImageView
  20. android:id="@+id/iv"
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content" />
  23. <TextView
  24. android:id="@+id/tv3"
  25. android:layout_width="match_parent"
  26. android:layout_height="wrap_content" />
  27. </LinearLayout>

四、MainActivity文件

  1. import android.content.DialogInterface;
  2. import android.graphics.Bitmap;
  3. import android.graphics.BitmapFactory;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.support.v7.app.AppCompatActivity;
  7. import android.os.Bundle;
  8. import android.view.Menu;
  9. import android.view.MenuItem;
  10. import android.view.View;
  11. import android.widget.Button;
  12. import android.widget.ImageView;
  13. import android.widget.TextView;
  14. import android.widget.Toast;
  15.  
  16. import com.lhgj.wfz.uploadfiles.utils.Base64Util;
  17. import com.lhgj.wfz.uploadfiles.utils.Fileutil;
  18. import com.lhgj.wfz.uploadfiles.utils.QueryUploadUtil;
  19.  
  20. import java.io.File;
  21.  
  22. public class MainActivity extends AppCompatActivity {
  23. private TextView tv1 = null;//上传的文件地址
  24. private TextView tv2 = null;//上传的文件名称
  25. private TextView tv3 = null;//上传是否成功提示
  26. private Button btn = null;//上传按钮
  27. private ImageView img = null;//图片
  28. private String filePath="/data/data/com.lhgj.wfz.uploadfiles/";//手机中文件存储的位置
  29. private String fileName ="temp.jpg";//上传的图片
  30. private String wsdl ="http://192.168.15.4:1122/service/vedios/GetVedios.asmx?WSDL";//WSDL
  31. private String url ="http://192.168.15.4:1122/service/vedios/GetVedios.asmx/FileUploadByBase64String";//与webservice交互的地址
  32.  
  33. /**
  34. * 由于上传文件是一个耗时操作,需要开一个异步,这里我们使用handle
  35. * */
  36. private Handler handler = new Handler() {
  37. public void handleMessage(android.os.Message msg) {
  38. String string = (String) msg.obj;
  39. Toast.makeText(MainActivity.this, string, Toast.LENGTH_LONG).show();;
  40. tv3.setText(string);
  41. };
  42. };
  43.  
  44. @Override
  45. protected void onCreate(Bundle savedInstanceState) {
  46. super.onCreate(savedInstanceState);
  47. setContentView(R.layout.activity_main);
  48. initView();
  49. }
  50.  
  51. /**
  52. * 初始化view
  53. * */
  54. private void initView(){
  55. tv1 = (TextView) findViewById(R.id.tv1);
  56. tv2 = (TextView) findViewById(R.id.tv2);
  57. tv3 = (TextView) findViewById(R.id.tv3);
  58. btn = (Button) findViewById(R.id.btn);
  59. img = (ImageView) findViewById(R.id.iv);
  60.  
  61. //设置显示的图片
  62. byte[] byteArray = null;
  63. byteArray = Fileutil.readFileToByteArray(new File(filePath+fileName));
  64. Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0,
  65. byteArray.length);
  66. img.setImageBitmap(bitmap);
  67.  
  68. //设置显示的文本
  69. tv1.setText("文件位置:" + filePath);
  70. tv2.setText("文件名称" + fileName);
  71.  
  72. btn.setOnClickListener(new BtnOnclickListener());
  73. }
  74.  
  75. /**
  76. * ImageView的事件响应
  77. * */
  78. private class BtnOnclickListener implements View.OnClickListener{
  79.  
  80. @Override
  81. public void onClick(View v) {
  82. new Thread(new Runnable() {
  83.  
  84. @Override
  85. public void run() {
  86. // TODO Auto-generated method stub
  87. Message message = Message.obtain();
  88. String result="";
  89. try {
  90. QueryUploadUtil quu = new QueryUploadUtil(Base64Util.getBase64String(filePath+fileName), "temp.png");
  91. result= quu.call(wsdl,wsdl);
  92. } catch (Exception e) {
  93. // TODO Auto-generated catch block
  94. e.printStackTrace();
  95. }
  96. message.obj=result;
  97. handler.sendMessage(message);
  98. }
  99. }).start();
  100. }
  101. }
  102. }

可以去我的github上下载Demo,两个文件:一个Android客户端,一个服务端。下载地址:https://github.com/weifengzz/UploadFile_1

使用.NET框架、Web service实现Android的文件上传(一)的更多相关文章

  1. 使用.NET框架、Web service实现Android的文件上传(二)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYUAAAKpCAIAAADcx6fPAAAgAElEQVR4nOydd1hT5+LHg1attbfr1t ...

  2. Android OkHttp文件上传与下载的进度监听扩展

    http://www.loongwind.com/archives/290.html 上一篇文章介绍了用Retrofit实现文件的上传与下载,但是我们发现没办法监听上传下载的进度,毕竟我们在做开发的时 ...

  3. Kindeditor+web.py+SAE Storage 实现文件上传 - 开源中国社区

    Kindeditor+web.py+SAE Storage 实现文件上传 - 开源中国社区 Kindeditor+web.py+SAE Storage 实现文件上传

  4. Web攻防系列教程之文件上传攻防解析(转载)

    Web攻防系列教程之文件上传攻防解析: 文件上传是WEB应用很常见的一种功能,本身是一项正常的业务需求,不存在什么问题.但如果在上传时没有对文件进行正确处理,则很可能会发生安全问题.本文将对文件上传的 ...

  5. 一个简单的QQ隐藏图生成算法 通过jQuery和C#分别实现对.NET Core Web Api的访问以及文件上传

    一个简单的QQ隐藏图生成算法   隐藏图不是什么新鲜的东西,具体表现在大部分社交软件中,预览图看到的是一张图,而点开后看到的又是另一张图.虽然很早就看到过这类图片,但是一直没有仔细研究过它的原理,今天 ...

  6. SSM + Android 网络文件上传下载

    SSM + Android 网络交互的那些事 2016年12月14日 17:58:36 ssm做为后台与android交互,相信只要是了解过的人都知道一些基本的数据交互,向json,对象,map的交互 ...

  7. android批量文件上传(android批量图片上传)

    项目中多处用到文件批量上传功能,今天正好解决了此问题,在此写出来,以便日后借鉴. 首先,以下架构下的批量文件上传可能会失败或者不会成功:   1.android客户端+springMVC服务端:服务端 ...

  8. Android 实现文件上传功能(upload)

    文 件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答案是肯定的.下面是一个模拟网站程 序上传文件的例子.这里只写出了Android部分的 ...

  9. SSM框架之SpringMVC(5)文件上传

    SpringMVC(5)文件上传 1.实现文件上传的前期准备 1.1.文件上传的必要前提 A form 表单的 enctype 取值必须是: multipart/form-data(默认值是:appl ...

随机推荐

  1. ul li span addClass removeClass

    <link type="text/css" href="./style/css/base.css" rel="stylesheet"& ...

  2. Dom4j 添加 / 更新 / 删除 XML

    1.获得文档 /** *1.获得解析流 *2.解析XML */ 2.添加 /** *1.获取父元素 *2.创建元素 *3.创建属性并添加到元素中 *4.元素添加到根节点 */ 3.更新 /** *1. ...

  3. MFC 点击改变文本 加法计时器 伸缩窗体

    1.添加所需控件,设置ID:labNum1,txtNum1.txtNum2.txtNum3.btnAdd,并将labNum1的属性Notify->true(控件在被单击或双击时可以发送消息) 2 ...

  4. 《Linux多线程服务器端编程》读书笔记第3章

    <Linux多线程服务器端编程>第3章主要讲的是多线程服务器的适用场合与常用的编程模型. 1.进程和线程 一个进程是"内存中正在运行的程序“.每个进程都有自己独立的地址空间(ad ...

  5. uva 105 - The Skyline Problem

    一.用数组储存该位置的最高点即可(图形的连续点离散化),注意左边界及右边界的情况: 注意:无论建筑物最左边是盖到哪里,你都得从1开始输出(输入输出都是integer,所以才能离散化): #includ ...

  6. 近期Responsive web design项目经验分享-高分辨率图片处理篇

    在高分辨率的情况下  商品的图片难免会失真 怎样才能让商品的图片在高分辨率的情况下 效果不失真 提供用户更好的体验呢 我发现了一个解决方案 不知道是不是你想要的 先上图片对比下效果 左侧是使用后   ...

  7. java并发编程_基本模块构建

    读<java并发编程实战>第五章学习记录:该章节主要介绍一些并发编程中一些基本的构建模块.如并发容器和并发工具类(闭锁和栅栏)以及一些需要注意的情况 并发容器 1. ConcurrentH ...

  8. Spring security oauth2最简单入门环境搭建

    关于OAuth2的一些简介,见我的上篇blog:http://wwwcomy.iteye.com/blog/2229889 PS:貌似内容太水直接被鹳狸猿干沉.. 友情提示 学习曲线:spring+s ...

  9. 记录终端输出的LOG到文件

    先要说明为什么要记录终端会话,因为常会遇到这样的情况,终端是有缓存大小限制的,当在终端打印的消息超出缓存范围,它前面的打印消息就自动丢失了,这对于我们调试程序会造成障碍,所以有记录完整终端打印消息的必 ...

  10. windows批处理命令教程

      批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令 ...