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

一、Web Service (.NET)

namespace VedioPlayerWebService.service.vedios
{
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
[SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)]
public class GetVedios : System.Web.Services.WebService
{
[WebMethod(EnableSession = true, Description = "上传文件")]
public int FileUploadByBase64String(string base64string, string fileName1)
{
try
{
string fileName = "D:\\VedioPlayerWeb\\videos\\" + fileName1;
// 取得文件夹
string dir = fileName.Substring(0, fileName.LastIndexOf("\\"));
//如果不存在文件夹,就创建文件夹
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
byte[] bytes = Convert.FromBase64String(base64string);
MemoryStream memoryStream = new MemoryStream(bytes, 0, bytes.Length);
memoryStream.Write(bytes, 0, bytes.Length);
// 写入文件
File.WriteAllBytes(fileName, memoryStream.ToArray());
if (File.Exists(fileName))
{
FileStream fsSource = new FileStream(fileName, FileMode.Open, FileAccess.Read);
fsSource.Close();
}
//返回数据如果是1,上传成功!
return 1;
}
catch (Exception ex)
{
//返回如果是-1,上传失败
return -1;
}
} }
}

二、工具类(Android)

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

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

2、读取文件的工具类

 import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
/**
* 读取文件的工具类
* Created by WFZ on 2015/12/7.
*/
public class Fileutil {
public static byte[] readFileToByteArray(File file) {
FileInputStream fileInputStream = null;
ByteArrayOutputStream byteArrayOutputStream = null;
try {
fileInputStream = new FileInputStream(file);
byteArrayOutputStream = new ByteArrayOutputStream();
byte[] bt = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(bt)) != -1) {
byteArrayOutputStream.write(bt, 0, len);
}
return byteArrayOutputStream.toByteArray();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (byteArrayOutputStream != null) {
try {
byteArrayOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
}

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

 import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE; /**
*
* Created by WFZ on 2015/12/7.
*/
public class QueryUploadUtil {
private String filename, base64string; public QueryUploadUtil(String base64str, String fileName) {
this.filename = fileName;
this.base64string = base64str;
}
// 需要实现Callable的Call方法
public String call(String wsdl,String url) throws Exception {
String str = "上传失败";
// TODO Auto-generated method stub
try {
//创建SoapObject对象,并指定WebService的命名空间和调用的方法名
SoapObject rpc = new SoapObject("http://tempuri.org/",
"FileUploadByBase64String");
//设置WebService方法的参数
rpc.addProperty("base64string", base64string);
rpc.addProperty("fileName1", filename);
//第3步:创建SoapSerializationEnvelope对象,并指定WebService的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
// 设置bodyOut属性
envelope.bodyOut = rpc;
envelope.dotNet = true;
envelope.setOutputSoapObject(rpc);
//创建HttpTransportSE对象,并指定WSDL文档的URL
/**
* 创建WSDL文档有三种方法:
* 在.NET中有三种方式生成WSDL:
* 1.在Web Service的URL后面加上WDSL需求,如下:
* http://localhost/webExamples/simpleService.asmx?WSDL
* 2.使用disco.exe。在命令行中写下如下的命令:
* disco http://localhost/webExamples/simpleService.asmx
*3.使用System.Web.Services.Description命名空间下提供的类
* */
HttpTransportSE ht = new HttpTransportSE(wsdl);
ht.debug = false;
//调用WebService
ht.call(url, envelope);
//使用getResponse方法获得WebService方法的返回结果
String result = String.valueOf(envelope.getResponse());
//这个地方是我自己设置的从webservice返回的结果,“1”表示上传成功。
if (result.toString().equals("1"))
str = "上传成功";
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
str = "上传错误";
}
return str;
}
}

三、布局文件

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:text="上传"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv3"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

四、MainActivity文件

 import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast; import com.lhgj.wfz.uploadfiles.utils.Base64Util;
import com.lhgj.wfz.uploadfiles.utils.Fileutil;
import com.lhgj.wfz.uploadfiles.utils.QueryUploadUtil; import java.io.File; public class MainActivity extends AppCompatActivity {
private TextView tv1 = null;//上传的文件地址
private TextView tv2 = null;//上传的文件名称
private TextView tv3 = null;//上传是否成功提示
private Button btn = null;//上传按钮
private ImageView img = null;//图片
private String filePath="/data/data/com.lhgj.wfz.uploadfiles/";//手机中文件存储的位置
private String fileName ="temp.jpg";//上传的图片
private String wsdl ="http://192.168.15.4:1122/service/vedios/GetVedios.asmx?WSDL";//WSDL
private String url ="http://192.168.15.4:1122/service/vedios/GetVedios.asmx/FileUploadByBase64String";//与webservice交互的地址 /**
* 由于上传文件是一个耗时操作,需要开一个异步,这里我们使用handle
* */
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
String string = (String) msg.obj;
Toast.makeText(MainActivity.this, string, Toast.LENGTH_LONG).show();;
tv3.setText(string);
};
}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} /**
* 初始化view
* */
private void initView(){
tv1 = (TextView) findViewById(R.id.tv1);
tv2 = (TextView) findViewById(R.id.tv2);
tv3 = (TextView) findViewById(R.id.tv3);
btn = (Button) findViewById(R.id.btn);
img = (ImageView) findViewById(R.id.iv); //设置显示的图片
byte[] byteArray = null;
byteArray = Fileutil.readFileToByteArray(new File(filePath+fileName));
Bitmap bitmap = BitmapFactory.decodeByteArray(byteArray, 0,
byteArray.length);
img.setImageBitmap(bitmap); //设置显示的文本
tv1.setText("文件位置:" + filePath);
tv2.setText("文件名称" + fileName); btn.setOnClickListener(new BtnOnclickListener());
} /**
* ImageView的事件响应
* */
private class BtnOnclickListener implements View.OnClickListener{ @Override
public void onClick(View v) {
new Thread(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
Message message = Message.obtain();
String result="";
try {
QueryUploadUtil quu = new QueryUploadUtil(Base64Util.getBase64String(filePath+fileName), "temp.png");
result= quu.call(wsdl,wsdl);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
message.obj=result;
handler.sendMessage(message);
}
}).start();
}
}
}

可以去我的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. 打开较大存储量的.sql文件时,出现SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问

    1. “消息 15281,级别 16,状态 1,过程 xp_cmdshell,第 1 行SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访 ...

  2. Java Se 基础系列(笔记) -- Exception && Array

    Exception 1.java 异常是java提供的用于处理程序中错误(指在程序运行的过程中发生的一些异常事件)的一种机制 2.java程序的执行过程中如果发生异常事件则自动生产一个异常类对象,该对 ...

  3. EasyUi DataGrid中数据编辑方式及编辑后数据获取,校验处理

    EasyUi中的DataGrid提供前台编辑的相关函数. 实现客户选中DataGrid中一列后,对选中列中的一个字段进行编辑,并对数据进行实时校验后,传递至后台保存的需求, 主要涉及到DataGrid ...

  4. JDK + Tomcat 安装配置

    学习Java 开发的第一步就是配置环境,今天第一次配置,把过程记录下以备后用. 一.下载JDK.Tomcat JDK:http://www.oracle.com/technetwork/java/ja ...

  5. TransactionScope的正确用法(转自:http://blog.csdn.net/greystar/article/details/1359960)

    前一阵贴了一个关于transactionscope的贴子,以为是MS的BUG.后来经过认真仔细的调试,才找到原因. 原来的代码本身是没有没问题的.只是关于事务资源的处理放错了地方.正确的写法应该如下 ...

  6. Json,Ajax(0516)

    一.JSON简介: JSON(JavaScript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读,同时也方便了机器进行解析和生成.JSON简单说就是java ...

  7. ubuntu下安装pyqt5

    在网上看了很多ubuntu系统中安装pyqt5,感觉有些麻烦. 主要的库只有一个:python3-pyqt5 可通过新立得安装,也可通过shell命令安装 sudo apt-get install p ...

  8. 基类方法的反隐藏 反private 秘籍

    class GoodStudent:private Mentor,private Student { public : using Mentor::GetInfo;   ///------------ ...

  9. 关于uC/OS的简单学习(转)

    1.微内核 与Linux的首要区别是,它是一个微内核,内核所实现的功能非常简单,主要包括: 一些通用函数,如TaskCreate(),OSMutexPend(),OSQPost()等. 中断处理函数, ...

  10. TWRP-recovery中文界面安装方法[转]

    把下载到的ui.zip放入sdcard1/twrp文件夹.注意,是内置存储卡中.如没有上述文件夹,自行建立后通过文件管理器放入,不是卡刷.文件夹应如下所示:sdcard1(内置SD)  |  ┕--t ...