|
|
|
@ -275,118 +275,126 @@ public class ConfigSubscribe : IJob
|
|
|
|
|
string model = "";
|
|
|
|
|
if (objectKey.ToLower().EndsWith("jpeg"))
|
|
|
|
|
{
|
|
|
|
|
var fileUrl ="http://" + _minioService.endPoint + "/" + _minioService._bucketName + "/" + objectKey;
|
|
|
|
|
using (var httpClient = new HttpClient())
|
|
|
|
|
{
|
|
|
|
|
suoluokey = "minipic/" + data.file.name.ToString();
|
|
|
|
|
// 目前读取64KB
|
|
|
|
|
// 添加Range请求头
|
|
|
|
|
httpClient.DefaultRequestHeaders.Range =
|
|
|
|
|
new RangeHeaderValue(0, 65535);
|
|
|
|
|
try
|
|
|
|
|
var fileUrl = "http://" + _minioService.endPoint + "/" + _minioService._bucketName +
|
|
|
|
|
"/" + objectKey;
|
|
|
|
|
using (var httpClient = new HttpClient())
|
|
|
|
|
{
|
|
|
|
|
var response = httpClient
|
|
|
|
|
.GetAsync(fileUrl, HttpCompletionOption.ResponseHeadersRead).Result;
|
|
|
|
|
if (response.StatusCode == HttpStatusCode.PartialContent)
|
|
|
|
|
suoluokey = "minipic/" + data.file.name.ToString();
|
|
|
|
|
// 目前读取64KB
|
|
|
|
|
// 添加Range请求头
|
|
|
|
|
httpClient.DefaultRequestHeaders.Range =
|
|
|
|
|
new RangeHeaderValue(0, 65535);
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
//Focal Length 35: 24 mm
|
|
|
|
|
//Exif Image Width: 4032 pixels : Exif SubIFD
|
|
|
|
|
//Exif Image Height: 3024 pixels : Exif SubIFD
|
|
|
|
|
// 3.1 解析Content-Range头(格式:bytes start-end/total)
|
|
|
|
|
var contentRange = response.Content.Headers.ContentRange;
|
|
|
|
|
if (contentRange != null)
|
|
|
|
|
var response = httpClient
|
|
|
|
|
.GetAsync(fileUrl, HttpCompletionOption.ResponseHeadersRead).Result;
|
|
|
|
|
if (response.StatusCode == HttpStatusCode.PartialContent)
|
|
|
|
|
{
|
|
|
|
|
picSize = contentRange.Length.Value;
|
|
|
|
|
Console.WriteLine(
|
|
|
|
|
$"获取范围:{contentRange.From}-{contentRange.To}/{contentRange.Length}");
|
|
|
|
|
}
|
|
|
|
|
//Focal Length 35: 24 mm
|
|
|
|
|
//Exif Image Width: 4032 pixels : Exif SubIFD
|
|
|
|
|
//Exif Image Height: 3024 pixels : Exif SubIFD
|
|
|
|
|
// 3.1 解析Content-Range头(格式:bytes start-end/total)
|
|
|
|
|
var contentRange = response.Content.Headers.ContentRange;
|
|
|
|
|
if (contentRange != null)
|
|
|
|
|
{
|
|
|
|
|
picSize = contentRange.Length.Value;
|
|
|
|
|
Console.WriteLine(
|
|
|
|
|
$"获取范围:{contentRange.From}-{contentRange.To}/{contentRange.Length}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 成功获取部分内容
|
|
|
|
|
var y = response.Content.ReadAsByteArrayAsync().Result;
|
|
|
|
|
MemoryStream ms = new MemoryStream(y);
|
|
|
|
|
var directories = ImageMetadataReader.ReadMetadata(ms);
|
|
|
|
|
foreach (var directory in directories)
|
|
|
|
|
{
|
|
|
|
|
if (directory is ExifDirectoryBase)
|
|
|
|
|
// 成功获取部分内容
|
|
|
|
|
var y = response.Content.ReadAsByteArrayAsync().Result;
|
|
|
|
|
MemoryStream ms = new MemoryStream(y);
|
|
|
|
|
var directories = ImageMetadataReader.ReadMetadata(ms);
|
|
|
|
|
foreach (var directory in directories)
|
|
|
|
|
{
|
|
|
|
|
if (directory.Name.Equals("Exif IFD0"))
|
|
|
|
|
if (directory is ExifDirectoryBase)
|
|
|
|
|
{
|
|
|
|
|
foreach (var tag in directory.Tags)
|
|
|
|
|
if (directory.Name.Equals("Exif IFD0"))
|
|
|
|
|
{
|
|
|
|
|
if (tag.Name.Equals("Model"))
|
|
|
|
|
foreach (var tag in directory.Tags)
|
|
|
|
|
{
|
|
|
|
|
model = tag.Description;
|
|
|
|
|
if (tag.Name.Equals("Model"))
|
|
|
|
|
{
|
|
|
|
|
model = tag.Description;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (directory.Name.Equals("Exif SubIFD"))
|
|
|
|
|
{
|
|
|
|
|
foreach (var tag in directory.Tags)
|
|
|
|
|
|
|
|
|
|
if (directory.Name.Equals("Exif SubIFD"))
|
|
|
|
|
{
|
|
|
|
|
if (tag.Name.Equals("Exif Image Width"))
|
|
|
|
|
foreach (var tag in directory.Tags)
|
|
|
|
|
{
|
|
|
|
|
width = int.Parse(tag.Description.Replace("pixels", "")
|
|
|
|
|
.Trim());
|
|
|
|
|
}
|
|
|
|
|
if (tag.Name.Equals("Exif Image Width"))
|
|
|
|
|
{
|
|
|
|
|
width = int.Parse(tag.Description.Replace("pixels", "")
|
|
|
|
|
.Trim());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (tag.Name.Equals("Exif Image Height"))
|
|
|
|
|
{
|
|
|
|
|
height = int.Parse(tag.Description.Replace("pixels", "")
|
|
|
|
|
.Trim());
|
|
|
|
|
}
|
|
|
|
|
if (tag.Name.Equals("Exif Image Height"))
|
|
|
|
|
{
|
|
|
|
|
height = int.Parse(tag.Description.Replace("pixels", "")
|
|
|
|
|
.Trim());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (tag.Name.Equals("Focal Length 35"))
|
|
|
|
|
{
|
|
|
|
|
focalLength = int.Parse(tag.Description.Replace("mm", "")
|
|
|
|
|
.Trim());
|
|
|
|
|
if (tag.Name.Equals("Focal Length 35"))
|
|
|
|
|
{
|
|
|
|
|
focalLength = int.Parse(tag.Description
|
|
|
|
|
.Replace("mm", "")
|
|
|
|
|
.Trim());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//Console.WriteLine(directory.Name);
|
|
|
|
|
if (directory.Name.Equals("Exif Thumbnail"))
|
|
|
|
|
{
|
|
|
|
|
foreach (var tag in directory.Tags)
|
|
|
|
|
//Console.WriteLine(directory.Name);
|
|
|
|
|
if (directory.Name.Equals("Exif Thumbnail"))
|
|
|
|
|
{
|
|
|
|
|
if (tag.Name.Equals("Thumbnail Offset"))
|
|
|
|
|
foreach (var tag in directory.Tags)
|
|
|
|
|
{
|
|
|
|
|
offset = int.Parse(tag.Description.Replace("bytes", "")
|
|
|
|
|
.Trim());
|
|
|
|
|
}
|
|
|
|
|
if (tag.Name.Equals("Thumbnail Offset"))
|
|
|
|
|
{
|
|
|
|
|
offset = int.Parse(tag.Description.Replace("bytes", "")
|
|
|
|
|
.Trim());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (tag.Name.Equals("Thumbnail Length"))
|
|
|
|
|
{
|
|
|
|
|
length = int.Parse(tag.Description.Replace("bytes", "")
|
|
|
|
|
.Trim());
|
|
|
|
|
if (tag.Name.Equals("Thumbnail Length"))
|
|
|
|
|
{
|
|
|
|
|
length = int.Parse(tag.Description.Replace("bytes", "")
|
|
|
|
|
.Trim());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ms.Seek(offset + 6, SeekOrigin.Begin);
|
|
|
|
|
byte[] buffer = new byte[length];
|
|
|
|
|
int bytesRead = ms.Read(buffer, 0, length);
|
|
|
|
|
// 上传缩略图到MinIO
|
|
|
|
|
await _minioService.PutObjectAsync("", data.file.name.ToString(), suoluokey,
|
|
|
|
|
new MemoryStream(buffer));
|
|
|
|
|
}
|
|
|
|
|
else if (response.StatusCode == HttpStatusCode.OK)
|
|
|
|
|
{
|
|
|
|
|
// 服务器不支持Range请求,返回完整内容
|
|
|
|
|
throw new InvalidOperationException("服务器不支持Range请求");
|
|
|
|
|
ms.Seek(offset + 6, SeekOrigin.Begin);
|
|
|
|
|
byte[] buffer = new byte[length];
|
|
|
|
|
int bytesRead = ms.Read(buffer, 0, length);
|
|
|
|
|
// 上传缩略图到MinIO
|
|
|
|
|
await _minioService.PutObjectAsync("", data.file.name.ToString(), suoluokey,
|
|
|
|
|
new MemoryStream(buffer));
|
|
|
|
|
}
|
|
|
|
|
else if (response.StatusCode == HttpStatusCode.OK)
|
|
|
|
|
{
|
|
|
|
|
// 服务器不支持Range请求,返回完整内容
|
|
|
|
|
throw new InvalidOperationException("服务器不支持Range请求");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
throw new HttpRequestException($"请求失败: {response.StatusCode}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw new HttpRequestException($"请求失败: {response.StatusCode}");
|
|
|
|
|
throw new Exception($"下载Range数据失败: {ex.Message}", ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
throw new Exception($"下载Range数据失败: {ex.Message}", ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var createdTimeStr = (string)data.file.metadata.created_time;
|
|
|
|
|
var createTime = string.IsNullOrEmpty(createdTimeStr)
|
|
|
|
|
? DateTime.Now
|
|
|
|
|
: createdTimeStr.ToDateTime();
|
|
|
|
|
var fileUpload = new LasaMediaFile()
|
|
|
|
|
{
|
|
|
|
|
Id = Guid.NewGuid().ToString(),
|
|
|
|
@ -404,7 +412,7 @@ public class ConfigSubscribe : IJob
|
|
|
|
|
Name = data.file.name,
|
|
|
|
|
ObjectKey = data.file.object_key,
|
|
|
|
|
Path = data.file.path, // 目前这个好像没有值
|
|
|
|
|
CreateTime = ((string)data.file.metadata.created_time).ToDateTime(),
|
|
|
|
|
CreateTime = createTime,
|
|
|
|
|
WorkspaceId = executeTask.WorkspaceId,
|
|
|
|
|
ParentKey = folderKey[2],
|
|
|
|
|
Tid = result.tid,
|
|
|
|
|