SVN r1160

SVN-Revision: r1160
This commit is contained in:
tdx
2026-04-23 09:09:45 +00:00
parent 951e59ea26
commit 809d3df242
2 changed files with 221 additions and 0 deletions
+152
View File
@@ -107,6 +107,158 @@ namespace Lskj.Util
}
return isUpload;
}
public static bool UploadFile(string token, string postUrl, string filePath, string moduleCode, string idValue, string speciesno, out string fileId, out string rtnMsg)
{
bool isUpload = false;
fileId = "";
rtnMsg = "";
try
{
FileInfo fileInfo = new FileInfo(filePath);
int pageSize = 1 * 1024 * 1024;
long totalSize = fileInfo.Length;
long position = 0;
int comfirm = 0;
int encode = 4;
int failNum = 0;
bool hasFail = false;
string uploadToken = Guid.NewGuid().ToString("N").Substring(0, 24);
string uploadFileName = Path.GetFileName(filePath);
// 如果你后台没有 DoWebUploadSafe,就改回 DoWebUpload
string uploadMethod = "DoWebUpload";
Dictionary<string, string> headerDic = new Dictionary<string, string>();
headerDic.Add("Authorization", "Bearer " + token);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
while (position < totalSize)
{
int readSize = (int)Math.Min(pageSize, totalSize - position);
byte[] buffer = new byte[readSize];
int realRead = fs.Read(buffer, 0, readSize);
if (realRead <= 0)
{
break;
}
if (realRead != readSize)
{
byte[] tempBytes = new byte[realRead];
Array.Copy(buffer, tempBytes, realRead);
buffer = tempBytes;
readSize = realRead;
}
long tsp = GetUnixTime();
string uploadUrl = string.Format(
postUrl,
moduleCode,
HttpUtility.UrlEncode(idValue),
"file",
totalSize,
position,
HttpUtility.UrlEncode(uploadFileName),
uploadMethod,
HttpUtility.UrlEncode(speciesno),
comfirm,
encode,
uploadToken,
tsp
);
string result = "";
HttpWebResponse webResponse = HttpHelper.PostFileChunk(uploadUrl, buffer, uploadFileName, headerDic, out result);
if (webResponse != null && !string.IsNullOrEmpty(result))
{
JObject jsonObject = (JObject)JsonConvert.DeserializeObject(result);
string isSuccess = jsonObject["success"] + "";
if (isSuccess.Equals("True", StringComparison.CurrentCultureIgnoreCase))
{
failNum = 0;
if (jsonObject.ContainsKey("data") && jsonObject["data"] != null && jsonObject["data"].Type == JTokenType.Object)
{
JObject dataObject = (JObject)jsonObject["data"];
if (dataObject.ContainsKey("FileName"))
{
uploadFileName = dataObject["FileName"] + "";
}
}
if (jsonObject.ContainsKey("other"))
{
fileId = jsonObject["other"] + "";
}
position += readSize;
}
else
{
string dataCode = jsonObject.ContainsKey("data") ? jsonObject["data"] + "" : "";
if (dataCode.Equals("9") && comfirm == 0)
{
comfirm = 1;
fs.Position = position;
continue;
}
if (jsonObject.ContainsKey("msg"))
{
rtnMsg = jsonObject["msg"] + "";
}
failNum++;
if (failNum < 2 && rtnMsg.IndexOf("权限") < 0 && rtnMsg.IndexOf("禁止") < 0)
{
fs.Position = position;
continue;
}
hasFail = true;
break;
}
}
else
{
rtnMsg = "上传请求失败," + result;
hasFail = true;
break;
}
}
}
if (!hasFail && position >= totalSize)
{
isUpload = true;
}
}
catch (Exception ex)
{
rtnMsg = ex.Message;
isUpload = false;
}
return isUpload;
}
private static long GetUnixTime()
{
DateTime startTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
return (long)(DateTime.UtcNow - startTime).TotalSeconds;
}
/// <summary>
/// 上传文件
/// </summary>