钉钉接口 给用户发钉盘文件消息 钉盘文件上传
釘釘接口 給用戶發釘盤文件消息
步驟概括:
創建一個用于企業內部開發的H5微應用。將文件發送給指定用戶,用戶將收到以次應用名義發送的一條文件消息
服務端調用“單步上傳文件”接口,上傳文件獲取mediaId
服務端調用“發送釘盤文件給指定用戶”接口,把釘盤文件當做消息內容發送給用戶
這里省略創建微應用的步驟。
步驟1:獲取access_token (GET)
請求地址:https://oapi.dingtalk.com/gettoken?appkey=key&appsecret=secret
返回說明
{
"errcode": 0,
"errmsg": "ok",
"access_token": "fw8ef8we8f76e6f7s8df8s"
}
步驟2:調用“單步上傳文件”接口,上傳文件獲取mediaId (POST)
請求地址:https://oapi.dingtalk.com/file/upload/single?access_token=ACCESS_TOKEN&agent_id=AGENT_ID&file_size=FILE_SIZE
文件大小 取字節;
返回說明
{
"media_id": "xxxxxxxx",
"errcode":0,
"errmsg":"ok"
}
步驟3:發送釘盤文件給指定用戶(POST)
請求地址:https://oapi.dingtalk.com/cspace/add_to_single_chat?access_token=ACCESS_TOKEN&agent_id=AGENT_ID&userid=USERID&media_id=MEDIA_ID&file_name=FILE_NAME
media_id 和file_name需要轉成urlEncode格式,{"errcode":40007,"errmsg":"不合法的媒體文件id"}除了media_id 不存在、為空,還有一個原因是因為沒有轉格式
引用 System.Web.HttpUtility;
HttpUtility.UrlEncode(" 內容 ");
返回結果
{
"errcode":0,
"errmsg":"ok"
}
下面貼上代碼:
using System.Text;
using System.IO;
using System.Data;
using System.Collections;
using TWays.Core.DBAccess;
using Newtonsoft.Json;
public class DDManager
{
#region 公共方法
/// <summary>
/// 記錄日志
/// </summary>
/// <param name="strMsg"></param>
private void Logger(string strMsg)
{
string strFilePath = System.Windows.Forms.Application.StartupPath + "\" + StaticConst.WxSendLog;
TWays.Core.Loger.LogMessage(strFilePath, strMsg, true);
}
//我這里是把釘釘的一些信息存在了數據庫里
//像APP_KEY、APP_SECRET之類的,根據自己定義的類型讀取信息
private DataSet GetValue(string type)
{
DataSet dr = DataAdapter.Query(string.Format(SqlText.selectDDTypeValue.ToUpper(), type));
return dr;
}
#endregion
#region 獲取配置信息
/// <summary>
/// 獲取微應用名稱
/// </summary>
/// <returns></returns>
public string GetAppMicorName(string type)
{
DataSet ds = GetValue(type);
if (ds.Tables[0].Rows.Count < 0) return null;
return TWays.Utils.ToString(ds.Tables[0].Rows[0]["DIC_NAME"]);
}
/// <summary>
/// 獲取APP_KEY
/// </summary>
/// <returns></returns>
public string GetDDAppKey(string type)
{
//return GetConfigValue(StaticConst.WX_APP_ID);
DataSet ds = GetValue(type);
if (ds.Tables[0].Rows.Count < 0) return null;
return TWays.Utils.ToString(ds.Tables[0].Rows[0]["APP_KEY"]);
}
/// <summary>
/// 獲取APP_SECRET
/// </summary>
/// <returns></returns>
public string GetDDAppSecret(string type)
{
//return GetConfigValue(StaticConst.WX_APP_SECRET);
DataSet ds = GetValue(type);
if (ds.Tables[0].Rows.Count < 0) return null;
return TWays.Utils.ToString(ds.Tables[0].Rows[0]["APP_SECRET"]);
}
/// <summary>
/// 獲取微應用id AGEN_ID
/// </summary>
/// <returns></returns>
public string GetDDAgenId(string type)
{
//return GetConfigValue(StaticConst.WX_QY_CORP_ID);
DataSet ds = GetValue(type);
if (ds.Tables[0].Rows.Count < 0) return null;
return TWays.Utils.ToString(ds.Tables[0].Rows[0]["AGEN_ID"]);
}
/// <summary>
/// 獲取配置信息
/// </summary>
/// <param name="strKey"></param>
/// <returns></returns>
public string GetConfigValue(string strKey)
{
string strKeyValue = string.Empty;
strKeyValue = TWays.Utils.ToString(System.Configuration.ConfigurationManager.AppSettings[strKey]);
return strKeyValue;
}
#endregion
#region 獲取POST消息
/// <summary>
/// 獲取post返回來的數據
/// </summary>
/// <returns></returns>
public static string PostInput()
{
Stream s = System.Web.HttpContext.Current.Request.InputStream;
byte[] b = new byte[s.Length];
s.Read(b, 0, (int)s.Length);
return Encoding.UTF8.GetString(b);
}
#endregion
#region 獲取企業號AccessToken
public string GetQyAccessToken(string type)
{
string QY_AppKey = this.GetDDAppKey(type);//釘釘的APP_KEY
string QY_AppSecret = this.GetDDAppSecret(type);//
string url = string.Format("https://oapi.dingtalk.com/gettoken?appkey={0}&appsecret={1}", QY_AppKey, QY_AppSecret);
return ToAccessTokenJson(HttpRequestUtil.GetAppPage(url, 5000, Encoding.UTF8));
}
public string ToAccessTokenJson(string val)
{
AccessToken deserializedToken = (AccessToken)JavaScriptConvert.DeserializeObject(val, typeof(AccessToken));
return deserializedToken.access_token;
}
#endregion
#region 獲取MediaId
public string GetQyMediaId(string type, decimal size, string path)
{
string QY_MediaId = string.Empty;
string strAccessToken = this.GetQyAccessToken(type);
string strAgenId = this.GetDDAgenId(type);
string url = string.Format("https://oapi.dingtalk.com/file/upload/single?access_token={0}&agent_id={1}&file_size={2}", strAccessToken, strAgenId, size);
QY_MediaId = ToAccessMediaId(HttpRequestUtil.HttpPosturl(path, url));
return QY_MediaId;
}
public string ToAccessMediaId(string val)
{
ThumbMedia deserializedMediaId = (ThumbMedia)JavaScriptConvert.DeserializeObject(val, typeof(ThumbMedia));
return deserializedMediaId.media_id;
}
#endregion
#region 獲取用戶id(判斷用戶是否存在)
public string GetQyUserId(string token, string userId)
{
string url = string.Format("https://oapi.dingtalk.com/user/get?access_token={0}&userid={1}", token, userId);
return ToUserJson(HttpRequestUtil.GetAppPage(url, 5000, Encoding.UTF8));
}
public string ToUserJson(string val)
{
Hashtable t = (Hashtable)JavaScriptConvert.DeserializeObject(val, typeof(Hashtable));
if (t["errcode"].ToString() == "0")
{
return t["userid"].ToString();
}
return "";
//User deserializedToken = (User)JavaScriptConvert.DeserializeObject(val, typeof(User));
//return deserializedToken.userid;
}
#endregion
}
DDManager
public class ExportExcel
{
public static void ExportToText(System.Data.DataTable dt, String filename)
{
ExportToText(dt, filename, false);
}
/// <summary>
/// 快速導出文本
/// </summary>
/// <param name="devXtraGrid"></param>
/// <param name="filename"></param>
public static void ExportToText(System.Data.DataTable dt, String filename, bool isFirst)
{
if (dt == null) return;
string strPath = filename;
try
{
//先打印標頭
StringBuilder strColu = new StringBuilder();
StringBuilder strValue = new StringBuilder();
string strColText = string.Empty;
string strColHeadText = string.Empty;
StreamWriter sw = null;
if (File.Exists(filename))
{
sw = new StreamWriter(new FileStream(strPath, FileMode.Append), Encoding.GetEncoding("GB2312"));
}
else
{
sw = new StreamWriter(new FileStream(strPath, FileMode.Create), Encoding.GetEncoding("GB2312"));
}
using (sw)
{
sw.AutoFlush = true;
if (isFirst)
{
//先打印表頭
for (int i = 0; i <= dt.Columns.Count - 1; i++)
{
strColHeadText = dt.Columns[i].ColumnName;
if (string.IsNullOrEmpty(strColHeadText))
{
strColHeadText = TWays.Utils.ToString(dt.Columns[i].ColumnName);
}
strColu.Append(strColHeadText);
strColu.Append(" ");
}
strColu.Remove(strColu.Length - 1, 1);//移出掉最后一個,字符
}
sw.WriteLine(strColu);
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr = dt.Rows[i];
if (dr != null)
{
strValue.Remove(0, strValue.Length);//移出
for (int j = 0; j <= dt.Columns.Count - 1; j++)
{
strColText = string.Empty;
if (dr[j] != null)
{
strColText = dr[j].ToString();
}
strValue.Append(strColText);
strValue.Append(" ");
}
strValue.Remove(strValue.Length - 1, 1);//移出掉最后一個,字符
sw.WriteLine(strValue);
}
}
sw.Flush();
sw.Close();
sw.Dispose();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 快速導出文本
/// </summary>
/// <param name="devXtraGrid"></param>
/// <param name="filename"></param>
public static void ExportToTextForBudget(System.Data.DataTable dt, System.Data.DataTable dtDate, String filename)
{
if (dt == null) return;
string strPath = filename;
try
{
//先打印標頭
bool isFirst = true;
StringBuilder strColu = new StringBuilder();
StringBuilder strValue = new StringBuilder();
string strColText = string.Empty;
string strColHeadText = string.Empty;
StreamWriter sw = null;
if (File.Exists(filename))
{
sw = new StreamWriter(new FileStream(strPath, FileMode.Append), Encoding.GetEncoding("GB2312"));
}
else
{
sw = new StreamWriter(new FileStream(strPath, FileMode.Create), Encoding.GetEncoding("GB2312"));
}
using (sw)
{
sw.AutoFlush = true;
if (isFirst)
{
string strAmtColName = string.Empty;
//先打印表頭
for (int i = 0; i <= dt.Columns.Count - 1; i++)
{
strColHeadText = dt.Columns[i].ColumnName;
if (strColHeadText.ToUpper().Contains("_AMT_"))
{
DataRow[] dr = dtDate.Select("COLUMN_NAME = '" + strColHeadText + "'");
if (dr.Length > 0)
{
strColHeadText = TWays.Utils.ToString(dr[0]["COLUMN_VALUE"]);
}
}
else if (strColHeadText.ToUpper().Contains("A"))
{
strColHeadText = strColHeadText.Replace("A", "");
}
strColu.Append(strColHeadText);
strColu.Append(" ");
}
strColu.Remove(strColu.Length - 1, 1);//移出掉最后一個,字符
}
sw.WriteLine(strColu);
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow dr = dt.Rows[i];
if (dr != null)
{
strValue.Remove(0, strValue.Length);//移出
for (int j = 0; j <= dt.Columns.Count - 1; j++)
{
strColText = string.Empty;
if (dr[j] != null)
{
strColText = dr[j].ToString();
}
strValue.Append(strColText);
strValue.Append(" ");
}
strValue.Remove(strValue.Length - 1, 1);//移出掉最后一個,字符
sw.WriteLine(strValue);
}
}
sw.Flush();
sw.Close();
sw.Dispose();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 通過StreamWriter寫
/// </summary>
/// <param name="dataSet"></param>
/// <param name="dsWeek"></param>
/// <param name="strOperDate"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool WriteToText(DataSet dataSet, DataSet dsWeek, string strOperDate, string fileName, bool isFirst)
{
string strPath = fileName;
System.Data.DataTable dataTable = dataSet.Tables[0];
int rowNumber = dataTable.Rows.Count;//不包括字段名
if (rowNumber == 0)
{
return false;
}
StringBuilder sb = new StringBuilder();
StringBuilder sbValue = new StringBuilder();
StreamWriter sw = null;
if (File.Exists(fileName))
{
sw = new StreamWriter(new FileStream(strPath, FileMode.Append), Encoding.GetEncoding("GB2312"));
}
else
{
sw = new StreamWriter(new FileStream(strPath, FileMode.Create), Encoding.GetEncoding("GB2312"));
}
using (sw)
{
string strColName = string.Empty;
string[] strWeekNum;
int iWeekNum;
string strWeekColName = string.Empty;
sw.AutoFlush = true;
try
{
if (isFirst)
{
int iColIndex = 0;
//生成字段名稱
foreach (DataColumn col in dataTable.Columns)
{
strColName = col.ColumnName;
if (strColName.Contains("WEEK_"))
{
strWeekNum = strColName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
iWeekNum = Convert.ToInt32(strWeekNum[2]);
strWeekColName = Convert.ToDateTime(TWays.Utils.ToString(dsWeek.Tables[0].Select(" WEEK_NUM = " + iWeekNum + " AND YEAR =" + Convert.ToInt32(strWeekNum[1]))[0]["BEGIN_DATE"])).ToString("MM/dd");
strColName = strWeekColName;
}
else if (strColName.Contains("DAY_"))
{
strWeekNum = strColName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
iWeekNum = Convert.ToInt32(strWeekNum[1]);
strWeekColName = Convert.ToDateTime(strOperDate).AddDays(-iWeekNum).ToString("MM/dd");
strColName = strWeekColName;
}
sb.Append(strColName);
sb.Append(" ");
iColIndex++;
}
sb.Remove(sb.Length - 1, 1);//移出掉最后一個,字符
sw.WriteLine(sb);
}
string strValue = string.Empty;
//生成數據
for (int i = 0; i < dataTable.Rows.Count; i++)
{
sbValue.Remove(0, sbValue.Length);//移出
for (int j = 0; j < dataTable.Columns.Count; j++)
{
strValue = TWays.Utils.ToString(dataTable.Rows[i][j]);
strValue = strValue.Replace("", "");
strValue = strValue.Replace("
", "");
strValue = strValue.Replace(" ", "");
strValue = strValue.Replace(""", "");
sbValue.Append(strValue);
sbValue.Append(" ");
}
sbValue.Remove(sbValue.Length - 1, 1);//移出掉最后一個,字符
sw.WriteLine(sbValue);
}
sw.Flush();
sw.Close();
sw.Dispose();
}
catch (Exception ex)
{
throw ex;
}
finally
{
sw = null;
sb = null;
dataTable = null;
dataSet = null;
dsWeek = null;
GC.Collect();
}
}
return true;
}
/// <summary>
/// 添加到壓縮文件
/// </summary>
/// <param name="strzipPath"></param>
/// <param name="strtxtPath"></param>
/// <returns></returns>
public static string CreateRar(string strzipPath, string strtxtPath)
{
string strResult = string.Empty;
try
{
if (File.Exists(strzipPath))
{
File.Delete(strzipPath);
}
System.Diagnostics.Process Process1 = new System.Diagnostics.Process();
Process1.StartInfo.FileName = "Winrar.exe";
Process1.StartInfo.CreateNoWindow = true;
//Process1.StartInfo.Arguments = " a -r " + strzipPath + " " + strtxtPath;
Process1.StartInfo.Arguments = " a -ep " + strzipPath + " " + strtxtPath;
Process1.Start();
}
catch (Exception ex)
{
strResult = ex.Message;
}
return strResult;
}
/// <summary>
/// 導出到Excel
/// </summary>
/// <param name="dataSet"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool DataSetToExcel(DataSet dataSet, string fileName)
{
if (File.Exists(fileName))
{
File.SetAttributes(fileName, FileAttributes.Normal);
File.Delete(fileName);
}
System.Data.DataTable dataTable = dataSet.Tables[0];
int rowNumber = dataTable.Rows.Count;//不包括字段名
int columnNumber = dataTable.Columns.Count;
int colIndex = 0;
//if (rowNumber == 0)
//{
// return false;
//}
//建立Excel對象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
excel.Visible = false;
Microsoft.Office.Interop.Excel.Range range;
//生成字段名稱
foreach (DataColumn col in dataTable.Columns)
{
colIndex++;
excel.Cells[1, colIndex] = col.ColumnName;
}
object[,] objData = new object[rowNumber, columnNumber];
for (int r = 0; r < rowNumber; r++)
{
for (int c = 0; c < columnNumber; c++)
{
objData[r, c] = dataTable.Rows[r][c];
}
}
// 寫入Excel
range = worksheet.get_Range(excel.Cells[2, 1], excel.Cells[rowNumber + 1, columnNumber]);
range.NumberFormat = "@";//設置單元格為文本格式
range.Value2 = objData;
workbook.SaveAs(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
try
{
workbook.Saved = true;
excel.UserControl = false;
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
finally
{
workbook.Close(Microsoft.Office.Interop.Excel.XlSaveAction.xlSaveChanges, Missing.Value, Missing.Value);
excel.Quit();
workbook = null;
worksheet = null;
excel = null;
range = null;
}
return true;
}
/// <summary>
/// 導出到Excel
/// </summary>
/// <param name="dataSet"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool DataSetToExcel(DataSet dataSet, DataSet dsWeek, string strOperDate, string fileName)
{
if (File.Exists(fileName))
{
File.Delete(fileName);
}
System.Data.DataTable dataTable = dataSet.Tables[0];
int rowNumber = dataTable.Rows.Count;//不包括字段名
int columnNumber = dataTable.Columns.Count;
int colIndex = 0;
if (rowNumber == 0)
{
return false;
}
//建立Excel對象
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
excel.Visible = false;
Microsoft.Office.Interop.Excel.Range range;
string strColName = string.Empty;
string[] strWeekNum;
int iWeekNum;
string strWeekColName = string.Empty;
//生成字段名稱
foreach (DataColumn col in dataTable.Columns)
{
strColName = col.ColumnName;
if (strColName.Contains("WEEK_"))
{
strWeekNum = strColName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
iWeekNum = Convert.ToInt32(strWeekNum[2]);
strWeekColName = Convert.ToDateTime(TWays.Utils.ToString(dsWeek.Tables[0].Select(" WEEK_NUM = " + iWeekNum + " AND YEAR =" + Convert.ToInt32(strWeekNum[1]))[0]["BEGIN_DATE"])).ToString("MM/dd");
strColName = strWeekColName;
}
else if (strColName.Contains("DAY_"))
{
strWeekNum = strColName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
iWeekNum = Convert.ToInt32(strWeekNum[1]);
strWeekColName = Convert.ToDateTime(strOperDate).AddDays(-iWeekNum).ToString("MM/dd");
strColName = strWeekColName;
}
colIndex++;
excel.Cells[1, colIndex] = strColName;
}
object[,] objData = new object[rowNumber, columnNumber];
for (int r = 0; r < rowNumber; r++)
{
for (int c = 0; c < columnNumber; c++)
{
objData[r, c] = dataTable.Rows[r][c];
}
}
// 寫入Excel
range = worksheet.get_Range(excel.Cells[2, 1], excel.Cells[rowNumber + 1, columnNumber]);
range.NumberFormat = "@";//設置單元格為文本格式
range.Value2 = objData;
//range.Value = objData;
workbook.SaveAs(fileName, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
try
{
workbook.Saved = true;
excel.UserControl = false;
GC.Collect();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
finally
{
workbook.Close(Microsoft.Office.Interop.Excel.XlSaveAction.xlSaveChanges, Missing.Value, Missing.Value);
excel.Quit();
workbook = null;
worksheet = null;
excel = null;
range = null;
}
return true;
}
/// <summary>
/// 通過StreamWriter寫
/// </summary>
/// <param name="dataSet"></param>
/// <param name="dsWeek"></param>
/// <param name="strOperDate"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool WriteToExcel(DataSet dataSet, DataSet dsWeek, string strOperDate, string fileName)
{
if (File.Exists(fileName))
{
File.Delete(fileName);
}
System.Data.DataTable dataTable = dataSet.Tables[0];
int rowNumber = dataTable.Rows.Count;//不包括字段名
if (rowNumber == 0)
{
return false;
}
StreamWriter sw = new StreamWriter(fileName, false, Encoding.GetEncoding("gb2312"));
StringBuilder sb = new StringBuilder();
string strColName = string.Empty;
string[] strWeekNum;
int iWeekNum;
string strWeekColName = string.Empty;
try
{
int iColIndex = 0;
//生成字段名稱
foreach (DataColumn col in dataTable.Columns)
{
strColName = col.ColumnName;
if (strColName.Contains("WEEK_"))
{
strWeekNum = strColName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
iWeekNum = Convert.ToInt32(strWeekNum[2]);
strWeekColName = Convert.ToDateTime(TWays.Utils.ToString(dsWeek.Tables[0].Select(" WEEK_NUM = " + iWeekNum + " AND YEAR =" + Convert.ToInt32(strWeekNum[1]))[0]["BEGIN_DATE"])).ToString("MM/dd");
strColName = strWeekColName;
}
else if (strColName.Contains("DAY_"))
{
strWeekNum = strColName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
iWeekNum = Convert.ToInt32(strWeekNum[1]);
strWeekColName = Convert.ToDateTime(strOperDate).AddDays(-iWeekNum).ToString("MM/dd");
strColName = strWeekColName;
}
sb.Append(strColName);
if (iColIndex < dataTable.Columns.Count - 1)
{
sb.Append(" ");
}
iColIndex++;
}
sb.Append(Environment.NewLine);
string strValue = string.Empty;
//生成數據
for (int i = 0; i < dataTable.Rows.Count; i++)
{
for (int j = 0; j < dataTable.Columns.Count; j++)
{
strValue = TWays.Utils.ToString(dataTable.Rows[i][j]);
strValue = strValue.Replace("", "");
strValue = strValue.Replace("
", "");
strValue = strValue.Replace(" ", "");
strValue = strValue.Replace(""", "");
sb.Append(strValue);
if (j < dataTable.Columns.Count - 1)
sb.Append(" ");
}
sb.Append(Environment.NewLine);
}
sw.Write(sb.ToString());
sw.Flush();
sw.Close();
}
catch (Exception ex)
{
throw ex;
}
finally
{
sw = null;
sb = null;
dataTable = null;
dataSet = null;
dsWeek = null;
GC.Collect();
}
return true;
}
/// <summary>
/// 通過StreamWriter寫
/// </summary>
/// <param name="dataSet"></param>
/// <param name="dsWeek"></param>
/// <param name="strOperDate"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public static bool WriteToExcel(DataSet dataSet, string fileName)
{
if (File.Exists(fileName))
{
File.Delete(fileName);
}
System.Data.DataTable dataTable = dataSet.Tables[0];
int rowNumber = dataTable.Rows.Count;//不包括字段名
if (rowNumber == 0)
{
return false;
}
StreamWriter sw = new StreamWriter(fileName, false, Encoding.GetEncoding("gb2312"));
StringBuilder sb = new StringBuilder();
string strColName = string.Empty;
try
{
int iColIndex = 0;
//生成字段名稱
foreach (DataColumn col in dataTable.Columns)
{
strColName = col.ColumnName;
sb.Append(strColName);
if (iColIndex < dataTable.Columns.Count - 1)
{
sb.Append(" ");
}
iColIndex++;
}
sb.Append(Environment.NewLine);
string strValue = string.Empty;
//生成數據
for (int i = 0; i < dataTable.Rows.Count; i++)
{
for (int j = 0; j < dataTable.Columns.Count; j++)
{
strValue = TWays.Utils.ToString(dataTable.Rows[i][j]);
strValue = strValue.Replace("", "");
strValue = strValue.Replace("
", "");
strValue = strValue.Replace(" ", "");
strValue = strValue.Replace(""", "");
sb.Append(strValue);
if (j < dataTable.Columns.Count - 1)
sb.Append(" ");
}
sb.Append(Environment.NewLine);
}
sw.Write(sb.ToString());
sw.Flush();
sw.Close();
}
catch (Exception ex)
{
throw ex;
}
finally
{
sw = null;
sb = null;
dataTable = null;
dataSet = null;
GC.Collect();
}
return true;
}
public static System.Data.DataTable GetCsvData(string pCsvpath, string pCsvname)
{
try
{
DataSet dsCsvData = new DataSet();
OleDbConnection OleCon = new OleDbConnection();
OleDbCommand OleCmd = new OleDbCommand();
OleDbDataAdapter OleDa = new OleDbDataAdapter();
OleCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + pCsvpath + ";Extended Properties='Text;FMT=Delimited(,);HDR=YES;IMEX=1';";
OleCon.Open();
System.Data.DataTable dts1 = OleCon.GetSchema("Tables");
System.Data.DataTable dts2 = OleCon.GetSchema("Columns");
OleCmd.Connection = OleCon;
OleCmd.CommandText = "select * from [" + pCsvname + "] where 1=1";
OleDa.SelectCommand = OleCmd;
OleDa.Fill(dsCsvData, "Table");
OleCon.Close();
return dsCsvData.Tables[0];
}
catch (Exception ex)
{
return null;
}
}
}
ExportExcel
/// <summary>
/// HTTP請求工具類
/// </summary>
public class HttpRequestUtil
{
#region 請求Url
#region 請求Url,不發送數據POST
/// <summary>
/// 請求Url,不發送數據
/// </summary>
public static string RequestUrl(string url)
{
return RequestUrl(url, "POST");
}
public static string RequestUrl(string url, string method)
{
// 設置參數
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Timeout = 600000;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = method;
request.ContentType = "text/html";
request.Headers.Add("charset", "utf-8");
//發送請求并獲取相應回應數據
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才開始向目標網頁發送Post請求
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
//返回結果網頁(html)代碼
string content = sr.ReadToEnd();
return content;
}
#endregion
#region 請求Url,不發送數據GET
public static string GetAppPage(string url, int httpTimeout, Encoding postEncoding)
{
string rStr = "";
System.Net.WebRequest req = null;
System.Net.WebResponse resp = null;
System.IO.Stream os = null;
System.IO.StreamReader sr = null;
try
{
//創建連接
req = System.Net.WebRequest.Create(url);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "GET";
//時間
if (httpTimeout > 0)
{
req.Timeout = httpTimeout;
}
//讀取返回結果
resp = req.GetResponse();
sr = new System.IO.StreamReader(resp.GetResponseStream(), postEncoding);
rStr = sr.ReadToEnd();
rStr = rStr.Trim(); //除去空格
}
catch
{
}
finally
{
try
{
//關閉資源
if (os != null)
{
os.Dispose();
os.Close();
}
if (sr != null)
{
sr.Dispose();
sr.Close();
}
if (resp != null)
{
resp.Close();
}
if (req != null)
{
req.Abort();
req = null;
}
}
catch
{
}
}
return rStr;
}
#endregion
#region 請求Url,發送數據
/// <summary>
/// 請求Url,發送數據
/// </summary>
public static string PostUrl(string url, string postData)
{
byte[] data = Encoding.UTF8.GetBytes(postData);
// 設置參數
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
CookieContainer cookieContainer = new CookieContainer();
request.Timeout = 600000;
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
Stream outstream = request.GetRequestStream();
outstream.Write(data, 0, data.Length);
outstream.Close();
//發送請求并獲取相應回應數據
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才開始向目標網頁發送Post請求
Stream instream = response.GetResponseStream();
StreamReader sr = new StreamReader(instream, Encoding.UTF8);
//返回結果網頁(html)代碼
string content = sr.ReadToEnd();
return content;
}
#endregion
#region 請求Url,上傳文件
public static string HttpPosturl(string filePath, string url)
{
string returnStr = string.Empty;
using (WebClient client = new WebClient())
{
byte[] data = client.UploadFile(url, filePath);
returnStr = Encoding.Default.GetString(data);
}
return returnStr;
}
#endregion
#endregion
#region Http下載文件
/// <summary>
/// Http下載文件
/// </summary>
public static string HttpDownloadFile(string url, string path)
{
// 設置參數
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Timeout = 600000;
//發送請求并獲取相應回應數據
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才開始向目標網頁發送Post請求
Stream responseStream = response.GetResponseStream();
//創建本地文件寫入流
Stream stream = new FileStream(path, FileMode.Create);
byte[] bArr = new byte[1024];
int size = responseStream.Read(bArr, 0, (int)bArr.Length);
while (size > 0)
{
stream.Write(bArr, 0, size);
size = responseStream.Read(bArr, 0, (int)bArr.Length);
}
stream.Close();
responseStream.Close();
return path;
}
#endregion
#region Http上傳文件
/// <summary>
/// Http上傳文件
/// </summary>
public static string HttpUploadFile(string url, string path)
{
// 設置參數
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Timeout = 600000;
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieContainer;
request.AllowAutoRedirect = true;
request.Method = "POST";
string boundary = DateTime.Now.Ticks.ToString("X"); // 隨機分隔線
request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
byte[] itemBoundaryBytes = Encoding.UTF8.GetBytes("
--" + boundary + "
");
byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("
--" + boundary + "--
");
int pos = path.LastIndexOf("\");
string fileName = path.Substring(pos + 1);
//請求頭部信息
StringBuilder sbHeader = new StringBuilder(string.Format("Content-Disposition:form-data;name="file";filename="{0}"
Content-Type:application/octet-stream
", fileName));
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbHeader.ToString());
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
byte[] bArr = new byte[fs.Length];
fs.Read(bArr, 0, bArr.Length);
fs.Close();
Stream postStream = request.GetRequestStream();
postStream.Write(itemBoundaryBytes, 0, itemBoundaryBytes.Length);
postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
postStream.Write(bArr, 0, bArr.Length);
postStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);
postStream.Close();
//發送請求并獲取相應回應數據
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
//直到request.GetResponse()程序才開始向目標網頁發送Post請求
Stream instream = response.GetResponseStream();
StreamReader sr = new StreamReader(instream, Encoding.UTF8);
//返回結果網頁(html)代碼
string content = sr.ReadToEnd();
return content;
}
#endregion
}
HTTP請求工具類
using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using TWays.Core.DBAccess;
using System.IO;
/// <summary>
/// 釘釘釘盤文件上傳
/// </summary>
public class TransDDExcel
{
public TransDDExcel()
{
_Result = "";
}
private string _Result; // 結果消息
public string Result
{
get
{
return _Result;
}
set
{
_Result = value;
}
}
public bool Process()
{
bool boolReturn = false;
try
{
//存在數據庫中的同步日志,推送成功的不在推送
DataSet dsSucess = DataAdapter.Query(string.Format(SqlText.selectGmTransTaskLogSucess, "1003"));
if (dsSucess != null && dsSucess.Tables[0].Rows.Count > 0)
{
Nany.Web.Trans.BusiUtils.SaveLog(Constant.BsLogDirectory, "同步推送文件成功,無需再次同步。");
boolReturn = true;
}
else
{
#region
string sysDate = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
//獲取企業號AccessToken和微應用AGEN_ID
DDManager ddM = new DDManager();
string strToken = ddM.GetQyAccessToken(Constant.CST_DD_TYPE_FILE_PUSH);
string strAgenId = ddM.GetDDAgenId(Constant.CST_DD_TYPE_FILE_PUSH);
//獲取根路徑
string path = Nany.Web.Trans.BusiUtils.GetRootPath();
//組合兩個路徑字符串
path = Path.Combine(path, "TransExcel");
string strResult = string.Empty;
string countPath = string.Empty;
string customerOrderPath = string.Empty;
List<string> _Path = new List<string>();
List<string> _title = new List<string>();
//查詢數據庫中可接收文件的釘釘用戶
DataSet dsAccount = DataAdapter.Query(string.Format(SqlText.selectDDAccount.ToUpper(), strAgenId));
if (dsAccount.Tables[0].Rows.Count <= 0)
{
Result = "沒有需要推送文件的賬戶";
return false;
}
//收銀客單分析
DataSet dsPosCashInfo = DataAdapter.Query(string.Format(SqlText.selectDDPosCashAccount.ToUpper(), sysDate));
countPath = path + "\" + DateTime.Now.AddDays(-1).ToString("yyyyMMdd") + "收銀客單分析.xlsx";
_Path.Add(countPath);
ExportExcel.DataSetToExcel(dsPosCashInfo, countPath);
//組織客單分析
DataSet dsCustomerOrder = DataAdapter.Query(string.Format(SqlText.selectDDSelectOrgCustomerOrderAnalyze.ToUpper(), sysDate));
customerOrderPath = path + "\" + DateTime.Now.AddDays(-1).ToString("yyyyMMdd") + "組織客單分析.xlsx";
_Path.Add(customerOrderPath);
ExportExcel.DataSetToExcel(dsCustomerOrder, customerOrderPath);
//發送兩個文件
_title.Add(DateTime.Now.AddDays(-1).ToString("yyyyMMdd") + "收銀客單分析.xlsx");
_title.Add(DateTime.Now.AddDays(-1).ToString("yyyyMMdd") + "組織客單分析.xlsx");
int error = 0;
int success = 0;
for (int i = 0; i < dsAccount.Tables[0].Rows.Count; i++)
{
DataRow dr = dsAccount.Tables[0].Rows[i];
string userId = ddM.GetQyUserId(strToken, dr["DD_CODE"].ToString());
if (string.IsNullOrEmpty(userId))
{
error++;
Nany.Web.Trans.BusiUtils.SaveLog(Constant.BsLogDirectory, "釘釘賬號【" + dr["DD_CODE"].ToString() + "】不存在");
//Result = "釘釘賬號【" + dr["DD_CODE"].ToString() + "】不存在";
continue;
}
for (int t = 0; t < _Path.Count; t++)
{
//判斷當前路徑所指向的是否為文件
if (File.Exists(_Path[t]))
{
//定義一個FileInfo對象,使之與filePath所指向的文件向關聯,
//以獲取其大小
FileInfo fileInfo = new FileInfo(_Path[t]);
decimal size = fileInfo.Length;
string strMediaId = ddM.GetQyMediaId(Constant.CST_DD_TYPE_FILE_PUSH, size, _Path[t]);
//Nany.Web.Trans.BusiUtils.SaveLog(Constant.BsLogDirectory, _Path[t]);
strResult = HttpRequestUtil.RequestUrl(string.Format("https://oapi.dingtalk.com/cspace/add_to_single_chat?access_token={0}&agent_id={1}&userid={2}&media_id={3}&file_name={4}",
ddM.GetQyAccessToken(Constant.CST_DD_TYPE_FILE_PUSH), strAgenId, dr["DD_CODE"].ToString(), HttpUtility.UrlEncode(strMediaId), HttpUtility.UrlEncode(_title[t])));
if (strResult.Contains(""errmsg":"ok""))
{
boolReturn = true;
success++;
//Result = "已向" + (success/2).ToString() + "位用戶成功推送文件,失敗" + error.ToString() + "位";
}
else
{
//Result = strResult;
Nany.Web.Trans.BusiUtils.SaveLog(Constant.BsLogDirectory, strResult);
boolReturn = false;
}
}
}
}
Result = "已向" + (success / 2).ToString() + "位用戶成功推送文件,失敗" + error.ToString() + "位";
#endregion
}
}
catch (Exception ex)
{
Result = ex.Message;
}
return boolReturn;
}
public void Dispose()
{
GC.SuppressFinalize(this);
}
}
發送釘盤文件給指定用戶
總結
以上是生活随笔為你收集整理的钉钉接口 给用户发钉盘文件消息 钉盘文件上传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue-router 去掉#
- 下一篇: shodan 搜寻公共摄像头