Android 上传图片到C#接口 例子

14 篇文章 1 订阅
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.EnterpriseServices;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization.Json;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Web;
using System.Threading.Tasks;
using System.Web;

namespace Comit.Vehicle.RestAgentServices
{
    [ServiceContract, AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
    [GlobalExceptionHandlerBehaviour(typeof(GlobalExceptionHandler))]
    public class UploadServices
    {

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        [WebInvoke(UriTemplate = "UploadImg", Method = "POST"), Description("上传图片")]
        public string UploadImg(Stream source)
        {
            var stopwatch = Stopwatch.StartNew();
            //请求地址
            string fileName = string.Empty;
            string serviceUrl = "UploadServices/UploadImg";
            try
            {
                //获取HTTP请求头部集合
                WebHeaderCollection headerCollection = WebOperationContext.Current.IncomingRequest.Headers;
                //业务编号
                int um_id = int.Parse(headerCollection["UM_ID"]);
                //用户编号
                int u_id = int.Parse(headerCollection["U_ID"]);

                string NAME = headerCollection["NAME"];

                
                if (um_id > 0)
                {
                    fileName = string.Format("{0}_{1}", DateTime.Now.ToString("yyyyMMddHHmmssffff"), NAME);
                    string imageDir = System.Configuration.ConfigurationManager.AppSettings.Get("uploadImg");
                    string uploadPath = string.Format("{0}{1}",imageDir , u_id);
                    //创建行程目录
                    if (!Directory.Exists(uploadPath))
                        Directory.CreateDirectory(uploadPath);
                    //保存的物理路径
                    string dirpath = string.Format("{0}/{1}", uploadPath, fileName);
                    //网站调用显示的的路径
                    UploadFile(source, dirpath);

                    return "true";
                }
                else {
                    //throw new WebFaultException<M_ERROR>(ErrorHelper.SetErrorCode(M_ENUM_CODE.PARAM_ERROR, serviceUrl), HttpStatusCode.OK);
                    return "false";
                }
            }
            catch (Exception ex)
            {
                //Logger.Error(fileName + "图片上传出错", ex);
                return "false";
            }
            finally
            {
                if (!string.IsNullOrEmpty(fileName)){
                     // Logger.Warn(string.Format("{0}图片上传完成,耗时{1:F1}秒", fileName, stopwatch.Elapsed.TotalSeconds));
                }
            }
        }



        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="source">数据源</param>
        /// <param name="path">路径</param>
        private static void UploadFile(Stream source, string path)
        {
            Stream destination = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
            byte[] buffer = new byte[0x1000];
            int numRead;
            while ((numRead = source.Read(buffer, 0, buffer.Length)) > 0)
            {
                destination.Write(buffer, 0, numRead);
            }
            source.Close();
            destination.Close();
        }
    }
}

 

 

package com.comit.broadcast;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

import com.comit.api.ApiService;
import com.comit.app.AppHpler;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseStream;
import com.lidroid.xutils.http.client.HttpRequest;
import com.lidroid.xutils.http.client.entity.FileUploadEntity;

/**
 * @ClassName: UploadService
 * @Description:上传服务
 * @author: RockeyCai
 * @date: 2015-11-05 上午14:14:59
 * 
 */
public class UploadService extends Service {

    // 上传标记
    public static final String UPLOAD_SERVICE_DO_UPLOAD_FLAG = "UPLOAD_SERVICE_DO_UPLOAD_FLAG";
    // 开始上传标记
    public static final boolean UPLOAD_SERVICE_DO_UPLOAD_TRUE = true;
    // 停止上传标记
    public static final boolean UPLOAD_SERVICE_DO_UPLOAD_FALSE = false;

    private String tag = UploadService.class.getCanonicalName();

    private Timer timer;
    private TimerTask mTimerTask;

    private boolean isRun = false;

    // 上传单线程池
    private ExecutorService pool;

    @Override
    public IBinder onBind(Intent intent) {
	return null;
    }

    public void onCreate() {
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

	boolean uploadFlag = intent.getBooleanExtra(UPLOAD_SERVICE_DO_UPLOAD_FLAG, false);
	if (uploadFlag) {
	    uploadImageTimer();
	} else {
	    stopUploadImage();
	}
	return super.onStartCommand(intent, flags, startId);
    }

    @Override
    public void onDestroy() {
	// TODO Auto-generated method stub
	super.onDestroy();
	// 停止上传服务
	stopUploadImage();
    }

    /**
     * 启动上传时间任务
     */
    private void uploadImageTimer() {
	stopUploadImage();
	isRun = true;
	timer = new Timer();
	mTimerTask = new TimerTask() {
	    @Override
	    public void run() {
		if (isRun) {
		    onUploadImage();
		}
	    }
	};
	// 延迟30秒,启动服务
	timer.schedule(mTimerTask, 30 * 1000);
    }

    /**
     * 开始上传服务
     */
    private void onUploadImage() {
	Log.i(tag, "时间任务执行中....");

	if (pool == null) {
	    pool = Executors.newSingleThreadExecutor();
	}
	for (File tempFile : this.getFileList()) {
	    // 单例线程池,处理上传任务列表
	    pool.execute(new UploadTask(tempFile));
	}
    }

    /**
     * @ClassName: UploadTask
     * @Description:上传图片任务
     * @author: RockeyCai
     * @date: 2015-11-6 下午3:52:18
     * 
     */
    class UploadTask implements Runnable {
	File file = null;
	String url = null;

	public UploadTask(File file) {
	    this.file = file;
	    this.url = ApiService.UPLOAD_IMG;
	}

	@Override
	public void run() {
	    // TODO Auto-generated method stub
	    Log.i(tag, "上传文件:" + file.getName());
	    // 设置超时时间为180秒,防止上传超时
	    HttpUtils httpUtils = new HttpUtils(60 * 3 * 1000);

	    RequestParams params = new RequestParams();
	    FileUploadEntity FileUploadEntity = new FileUploadEntity(file, "application/json; charset=utf-8");
	    params.setBodyEntity(FileUploadEntity);
	    params.addHeader(ApiService.API_KEY_NAME, ApiService.API_KEY_VALUE);
	    params.addHeader("UM_ID", "1");
	    params.addHeader("U_ID", "2");
	    params.addHeader("NAME", file.getName());

	    try {
		ResponseStream responseStream = httpUtils.sendSync(HttpRequest.HttpMethod.POST, url, params);
		String result = responseStream.readString();
		if (result.indexOf("true") > -1) {
		    Log.i(tag, "上传结果....:" + result);
		    //上传成功处理
		    updateFileState(0);
		}
	    } catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		Log.i(tag, "上传失败....:" + e.getMessage());
	    }
	}

    }

    /**
     * 停止上传服务
     */
    private void stopUploadImage() {
	if (timer != null) {
	    if (mTimerTask != null) {
		mTimerTask.cancel();
		mTimerTask = null;
	    }
	    timer.cancel();
	    timer = null;
	    isRun = false;
	}

	if (pool != null) {
	    // 关闭线程池
	    pool.shutdown();
	}

    }

    /**
     * @Title: getFileList
     * @Description: 获取上传的文件列表
     * @param: @return
     * @return: List<File>
     */
    private List<File> getFileList() {
	
	//TODO 模拟获取数据源
	
	List<File> fileList = new ArrayList<File>();
	String path = AppHpler.getPath() + "/youku/img";
	Log.i(tag, path);
	File file = new File(path);
	if (file.exists()) {
	    if (pool == null) {
		pool = Executors.newSingleThreadExecutor();
	    }
	    for (File tempFile : file.listFiles()) {
		if (tempFile.isFile()) {
		    fileList.add(tempFile);
		}
	    }
	}
	return fileList;
    }
    
    /**
     * @Title: updateFileState   
     * @Description: 修改上传文件列表  
     * @param: @param id      
     * @return: void
     */
    private void updateFileState(long id){
	//TODO  修改上传文件列表
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值