android上传图片、视频、文件,服务端使用wcf接收

最近一直在搞android上传图片、视频、文件,服务端使用wcf接收,本文对调试中的遇到的问题进行记录。

首先android上传一些小图片是比较容易的一天下来差不多就能调试出来,但是上传一些大的文件时就出现各种问题,包括wcf默认支持64k的文件,后来大图片可以上传了,但是传视频又有问题,上传的视频打不开,经过努力google最后问题终于解决了。作者kwstu QQ806693619

以下是调试代码:原文链接:http://www.kwstu.com/ArticleView/kwstu_2013327194830639

一、Android:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

package com.kwstu.palmjn;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import org.apache.http.HttpResponse;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.entity.InputStreamEntity;

import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ImageView;

public class UpladeActivity extends Activity {

   private Button update_btn;

   private ImageView img_img;

   /** Called when the activity is first created. */

   @Override

   public void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);

      setContentView(R.layout.uploadactivity);

      findAll();

      bind();

   }

   public void findAll() {

      update_btn = (Button) this.findViewById(R.id.update_btn);

      img_img = (ImageView) this.findViewById(R.id.img_img);

   }

   public void bind() {

      update_btn.setOnClickListener(mylistener);

   }

   private View.OnClickListener mylistener = new OnClickListener() {

      public void onClick(View v) {

         // TODO Auto-generated method stub

         switch (v.getId()) {

         case R.id.update_btn:

            Thread th1 = new Thread(new mythread());

            th1.start();

            break;

         default:

            break;

         }

      }

   };

   Handler hd = new Handler() {

      @Override

      public void handleMessage(Message msg) {

         // TODO Auto-generated method stub

         // super.handleMessage(msg);

         if (msg.what == 123) {

            String jason = msg.obj.toString();

            String filepath = Environment.getExternalStorageDirectory()

                   + File.separator + jason;

            Bitmap bitmap1 = BitmapFactory.decodeFile(filepath);

            img_img.setImageBitmap(bitmap1);

         }

      }

   };

   class mythread implements Runnable {

      public void run() {

         // TODO Auto-generated method stub

         HttpClient hc = new DefaultHttpClient();

         HttpPost hp = new HttpPost(wcf地址);

         HttpResponse hr;

         InputStreamEntity reqEntity;

         String path = 上传文件路径;

         File f = new File(path);

         if (f.exists()) {

            System.out.println("successful");

            try {

                reqEntity = new InputStreamEntity(new FileInputStream(path), -1);

                reqEntity.setContentType("binary/octet-stream");

                reqEntity.setChunked(true); // Send in multiple parts if needed

                hp.setEntity(reqEntity);

                System.out.println("4");

                HttpResponse response = hc.execute(hp);

                System.out.println("5");

            } catch (ClientProtocolException e) {

                // TODO Auto-generated catch block

                System.out.println(e.getMessage());

                //e.printStackTrace();

            } catch (IOException e) {

                // TODO Auto-generated catch block

                //e.printStackTrace();

                System.out.println(e.getMessage());

            }

         }

      }

   }

}

Wcf代码:

接口

?


1

2

3

[OperationContract]

[WebInvoke(BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]

string update_pictrue(Stream getStream);

实现

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

public string update_pictrue(Stream getStream)

        {

            Console.WriteLine("setData service has bean started!");

            string uploadFolder = @"C:\kkk\";

            string savaPath = "sss";

            //string dateString = DateTime.Now.ToShortDateString() + @"\";

            string fileName ="ddd.mp4";

            //Stream sourceStream = request.FileData;

            FileStream targetStream = null;

            if (!getStream.CanRead)

            {

                throw new Exception("数据流不可读!");

            }

            if (savaPath == null) savaPath = @"Photo\";

            if (!savaPath.EndsWith("\\")) savaPath += "\\";

            uploadFolder = uploadFolder + savaPath; //+ dateString;

            if (!Directory.Exists(uploadFolder))

            {

                Directory.CreateDirectory(uploadFolder);

            }

            string filePath = Path.Combine(uploadFolder, fileName);

            using (targetStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))

            {

                //read from the input stream in 4K chunks

                //and save to output stream

                const int bufferLen = 4096;

                byte[] buffer = new byte[bufferLen];

                int count = 0;

                while ((count = getStream.Read(buffer, 0, bufferLen)) > 0)

                {

                    targetStream.Write(buffer, 0, count);

                }

                targetStream.Close();

                getStream.Close();

            }

            return "";

        }

配置很重要必须支持大文件上传

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

<?xml version="1.0"?>

<configuration>

    <system.serviceModel>

      <behaviors>

        <serviceBehaviors>

          <behavior name="Host.ServiceBehavior">

            <serviceMetadata httpGetEnabled="true"/>

            <serviceDebug includeExceptionDetailInFaults="false"/>

            <dataContractSerializer maxItemsInObjectGraph="2147483647"/>

          </behavior>

        </serviceBehaviors>

        <endpointBehaviors>

          <behavior name="json">

            <enableWebScript />

          </behavior>

        </endpointBehaviors>

      </behaviors>

      <services>

        <service name="Host.Service" behaviorConfiguration="Host.ServiceBehavior">

          <endpoint  binding="webHttpBinding" contract="Host.IService" behaviorConfiguration="json" bindingConfiguration="LargeBuffer">

          <identity>

            <dns value="localhost"/>

          </identity>

          </endpoint>

          <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>

          <host>

            <baseAddresses>

              <add baseAddress="http://localhost:8732/Mush/Host/Service/"/>

            </baseAddresses>

          </host>

        </service>

      </services>

    

      <bindings>

        <webHttpBinding>

          <binding name="LargeBuffer"

          maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">

            <readerQuotas

            maxStringContentLength="2147483647" maxArrayLength="2147483647"/>

            <security mode="None"></security>

          </binding>

        </webHttpBinding>

      </bindings>

    </system.serviceModel>

  <system.webServer>

    <modules runAllManagedModulesForAllRequests="true"/>

  </system.webServer>

<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

时间: 2024-10-29 19:11:25

android上传图片、视频、文件,服务端使用wcf接收的相关文章

Android客户端与PHP服务端通信(二)

概述 本节通过一个简单的demo程序简单的介绍Android客户端通过JSON向PHP服务端提交订单,PHP服务端处理订单后,通过JSON返回结果给Android客户端.正常来讲,PHP服务端在处理订单过程中,需要与MySQL数据库交互,这里为了简单起见,暂时省掉MySQL. 通信格式 首先,需要定下客户端与服务端之间通信格式,如下表 Android客户端 客户端与服务端采用JSON数据格式通信,同时采用HTTP通信协议交互,采用POST方式提交结果.同时还要注意一点,与WEB服务器通信的过程需

服务端增加WCF服务全局异常处理机制

转自:http://www.csframework.com/archive/1/arc-1-20150109-2193.htm 服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. 1 /// <summary> 2 /// WCF服务端异常处理器 3 /// </summary> 4 public class WCF_Exceptio

PHP-Socket服务端客户端发送接收通信实例详解

Socket介绍 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 在Internet上的主机一般运行了多个服务软件,同时提供几种服务.每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务. Socket连接过程 根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认.

android使用wcf接收上传图片视频文件

一.Android 权限配置文件: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.niewei.updatefile" android:versionCode="1" android:versio

Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端,本地在进行拉流播放的流程.所以这个过程中,我们需要首先来把服务端这个中间环节的工作搞定,后续再弄推流和拉流功能.现在推流大部分都是使用RTMP/HLS协议的,关于这两个协议的区别: 所以我们服务端搭建就需要用这两个协议,不过本文放心了,不会去手动的编写一套协议代码的,谁叫这个世界属于开源呢? 需要的

七牛云存储android客户端及java服务端代码编写

前一篇博客提到让我很伤心的c应用,由于是一款供用户上传图片的应用,因此必须解决图片存储问题,如果直接将图片存储至服务器,当用户上传图片较多,服务器空间将很快吃紧,同时也没有那么大的带宽,现实中我买的阿里云服务器是最低配置,数据盘才20G,带宽才1M,如果用这样配置的服务器做图片存储,那实在太扯了.于是很自然的想到用图片云存储服务器,通过不断查找资料,最后将目标定位在七牛云和又拍云.在做选择时,主要对比了两者之间的价格及技术优势,也看了很多相关话题讨论,个人认为这两者无论从技术方案还是产品价格,都

上传文件 服务端模拟存储

这里可以选用Parcelable来进行序列化,parcelable效率更高,我这里选用的是serializable 服务端和客户端都要有此文件,并且所在的包名要一致 不懂可以参考parcelable(http://www.cnblogs.com/mydomainlistentome/p/4687173.html); package lyl.sole.util; import java.io.Serializable; public class SerializUtil implements Se

Android客户端与PHP服务端通信(五)---移植使用极光推送

概述 上一节备研究了示例工程的框架,本节准备自己创建工程,并将极光推送移植到其上. 创建工程 首先创建一个工程,工程名和应用名为lovelife,包名com.lygk.lovelife 一直"Next",直到Finish,此时建立工程完毕,如下图 集成JPush SDK 1. 导入SDK开发包 关于集成SDK的方法,JPush 官方文档已经讲得很详细,可以去看 http://docs.jpush.io/guideline/android_guide/ ,这里我简单的描述一下步骤. 首先

Android 手机卫士--构建服务端json、请求网络数据

本文地址:http://www.cnblogs.com/wuyudong/p/5900384.html,转载请注明源地址. 数据的传递 客户端:发送http请求 http://www.oxx.com/index.jsp?key=value 服务器:在接受到请求以后,给客户端发送数据,(json,xml),json数据从数据库中读取出来,读取数据拼接json,语法规则,结构 获取服务器版本号(客户端发请求,服务端给响应,(json,xml)) http://www.oxxx.com/update.