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 修改上传文件列表
}
}