using System.Net;
|
using System.Text;
|
using Newtonsoft.Json.Linq;
|
|
namespace MES.Service.service.PLM;
|
|
#region 1.根据文档物理文件id获取文档流数据
|
|
public class WarehouseDownloadDoc
|
{
|
private readonly string _cloudUrl = "http://122.227.249.70:5050/k3cloud";
|
|
private readonly string
|
_warehouse = "http://192.168.1.90/CloudPLMWarehouse";
|
|
#region 文档服务器上下文
|
|
private string WarehouseCTX
|
{
|
get
|
{
|
var json = "{\"ap1\":{ \"AcctID\":\"" + "6654201b47f099" +
|
"\",\"Username\":\"Administrator\",\"Password\":\"Lts88666*\",\"Lcid\":2052,\"AuthenticateType\":1,\"PasswordIsEncrypted\":\"false\",\"ClientInfo\":{\"ClientType\":8}}";
|
var resp = GetResponse(
|
"http://122.227.249.70:5050/k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.User.UserService.ValidateLoginInfo.common.kdsvc",
|
json, new Dictionary<string, string>());
|
var ret = new StreamReader(resp.GetResponseStream(), Encoding.UTF8)
|
.ReadToEnd();
|
var result = JObject.Parse(ret)["Context"];
|
var token = result["UserToken"].ToString();
|
var warehouseCtx =
|
string.Format("LoginUrl={0}&KDServiceSessionId={1}", _cloudUrl,
|
JObject.Parse(ret)["KDSVCSessionId"]); //安全新方式
|
return Convert.ToBase64String(Encoding.UTF8.GetBytes(warehouseCtx));
|
/*string json = "{\"ap1\":{ \"AcctID\":\"" + "6654201b47f099" + "\",\"Username\":\"Administrator\",\"Password\":\"Lts88666*\",\"Lcid\":2052,\"AuthenticateType\":1,\"PasswordIsEncrypted\":\"false\",\"ClientInfo\":{\"ClientType\":8}}";
|
var resp = GetResponse("http://122.227.249.70:5050/k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.User.UserService.ValidateLoginInfo.common.kdsvc", json, new Dictionary<string, string>());
|
string ret = (new StreamReader(resp.GetResponseStream(), Encoding.UTF8)).ReadToEnd();
|
var result = JObject.Parse(ret)["Context"];
|
string token = result["UserToken"].ToString();
|
var warehouseCtx = string.Format("LoginUrl={0}/&UserToken={1}", _cloudUrl, token);
|
return Convert.ToBase64String(Encoding.UTF8.GetBytes(warehouseCtx));*/
|
}
|
}
|
|
#endregion
|
|
#region 电子仓访问凭证
|
|
private string Token
|
{
|
get
|
{
|
var token = Guid.NewGuid().ToString();
|
return token;
|
}
|
}
|
|
#endregion
|
|
#region 物理文件id
|
|
private string GetFileId(string fileId)
|
{
|
return Convert.ToBase64String(Encoding.UTF8.GetBytes(fileId));
|
}
|
|
#endregion
|
|
#region 发送请求
|
|
public Stream SendRequest(string op, string fileId)
|
{
|
var header = new Dictionary<string, string>
|
{
|
{ "FileID", GetFileId(fileId) },
|
{ "CTX", WarehouseCTX },
|
{ "token", Token },
|
{ "PLM_ACCESS_TYPE", "pure" }
|
};
|
return PostDataViaHttpWebRequest(RequestUrl(op), string.Empty, header,
|
!op.Equals("Download"));
|
}
|
|
#endregion
|
|
#region 请求的URL
|
|
private string RequestUrl(string op)
|
{
|
return _warehouse + "/" + op;
|
}
|
|
#endregion
|
|
#region 获取响应
|
|
private HttpWebResponse GetResponse(string url, string bodyJson,
|
Dictionary<string, string> header)
|
{
|
var data = Encoding.UTF8.GetBytes(bodyJson);
|
|
var request = (HttpWebRequest)WebRequest.Create(url);
|
request.Method = WebRequestMethods.Http.Post;
|
request.ContentType = "application/json";
|
request.ContentLength = data.Length;
|
if (header != null)
|
foreach (var p in header)
|
request.Headers.Add(p.Key, p.Value);
|
|
using (var reqStream = request.GetRequestStream())
|
{
|
reqStream.Write(data, 0, data.Length);
|
reqStream.Close();
|
}
|
|
HttpWebResponse resp = null;
|
try
|
{
|
resp = (HttpWebResponse)request.GetResponse();
|
}
|
catch (WebException ex)
|
{
|
var res = ex.Response;
|
if (res != null)
|
{
|
var statusBase64 =
|
((HttpWebResponse)ex.Response)
|
.StatusDescription; //base64编码后的报错信息
|
}
|
}
|
|
return resp;
|
}
|
|
#endregion
|
|
#region 返回文件流给前端
|
|
private Stream PostDataViaHttpWebRequest(string url, string bodyJson,
|
Dictionary<string, string> header, bool isGetContent)
|
{
|
var resp = GetResponse(url, bodyJson, header);
|
Console.WriteLine(resp.GetResponseStream());
|
return resp.GetResponseStream(); // 直接返回响应流
|
}
|
|
#endregion
|
|
#region 保存文件到本地
|
|
/* private void PostDataViaHttpWebRequest(string url, string bodyJson, Dictionary<string, string> header, bool isGetContent)
|
{
|
|
var resp = GetResponse(url, bodyJson, header);
|
var resultJson = string.Empty;
|
Stream stream = File.Open("D://DownloadDocDemo.pdf", FileMode.OpenOrCreate);
|
int packageSize = 1024 * 1024;
|
byte[] buffer = new byte[packageSize];
|
using (stream)
|
{
|
using (Stream outputStream = resp.GetResponseStream())
|
{
|
int readLength = 0;
|
while ((readLength = outputStream.Read(buffer, 0, packageSize)) > 0)
|
{
|
stream.Write(buffer, 0, readLength);
|
stream.Flush();
|
}
|
outputStream.Close();
|
}
|
stream.Close();
|
}
|
}*/
|
|
#endregion
|
}
|
|
#endregion
|