ASP.NET - 上传图片到服务器后缺失图像关键字

13
我正在将图像上传到服务器并对其进行处理,有趣的是,在上传图像后,图像关键字丢失了。尽管其他图像属性还在。 enter image description here 解析标签没有问题,请忽略以下代码片段。
using (var xmp = Xmp.FromFile(workingFilePath, XmpFileMode.ReadOnly))
{
    var iptc = new Iptc(xmp);
    var Keywords = iptc.Keywords;
}

注意:我正在使用FineUploader上传图片。

FineUploader配置 -

var manualUploader = new qq.FineUploader({
    element: document.getElementById('fine-uploader-manual-trigger'),
    template: 'qq-template-manual-trigger',
    request: {
        endpoint: '/image/uploadimage',
        params: {
            datestamp: datetimeStamp
        }
    },
    callbacks: {
    },
    autoUpload: false,
    multiple: true
});

qq(document.getElementById("trigger-upload")).attach("click", function () {
    manualUploader.uploadStoredFiles();
});

文件上传器日志 -

 [Fine Uploader 5.10.1] Received 1 files.
 [Fine Uploader 5.10.1] Attempting to validate image.
 [Fine Uploader 5.10.1] Generating new thumbnail for 0
 [Fine Uploader 5.10.1] Attempting to draw client-side image preview.
 [Fine Uploader 5.10.1] Attempting to determine if _DSE8404.jpg can be rendered in this browser
 [Fine Uploader 5.10.1] First pass: check type attribute of blob object.
 [Fine Uploader 5.10.1] Second pass: check for magic bytes in file header.
 [Fine Uploader 5.10.1] '_DSE8404.jpg' is  able to be rendered in this browser
 [Fine Uploader 5.10.1] Moving forward with EXIF header parsing for '_DSE8404.jpg'
 [Fine Uploader 5.10.1] EXIF Byte order is little endian
 [Fine Uploader 5.10.1] Found 10 APP1 directory entries
 [Fine Uploader 5.10.1] Successfully parsed some EXIF tags
 [Fine Uploader 5.10.1] Sending simple upload request for 0
 [Fine Uploader 5.10.1] xhr - server response received for 0

编辑: 看起来我找到了问题所在。标签中有一些冰岛字符,这导致了问题。有人知道如何解决吗!

最新编辑: 如果这些标签是从Adobe Photoshop Lightroom添加的,则会出现问题。但是,如果相同的标签是通过更新属性从Windows机器添加的,则可以正常工作!


请展示您的Fine Uploader配置。 - Ray Nicholus
@RayNicholus - 在上面的帖子中添加 - Abdul Ahad
Fine Uploader 绝对没有问题。上传之前,文件不会被任何方式操纵,除非启用了缩放功能(这里并非如此)。其他原因导致了您的问题。我猜测“标签”不是图像的 EXIF/XMP 数据的一部分。可能是在 Windows 中存储在实际文件之外。 - Ray Nicholus
1
“Xmp”和“Iptc”来自哪里?你尝试过对这两个文件进行二进制比较吗? - Cyril Durand
我认为你可以添加编码以支持这些字母。类似这样 Encoding.GetEncoding("iso-8859-1"),当我读取包含冰岛字符的文件时会使用它。 - Ancient
显示剩余3条评论
1个回答

3

你的问题可能有两个原因:

  1. 在某些情况下,您正在重写您的图片,可能使用了一个不能正确处理标签或因其配置而剥离标签的类。
    如果您只保存从客户端接收到的二进制内容,您也将恢复原始标签,前提是您的图像文件格式符合您的期望。

  2. 如果您的图像文件存储方式与您的期望不同,取决于您提取它们的方式,可能无法检索标签。
    例如,JPG/JPEG标签可以以各种方式存储(其中之一是XMP)。 请查看以下链接以获取更多详细信息。您将看到还有其他存储标签的方法(如EXIF扩展XMPQVCIFLIR)。
    要检索这些标签,您必须根据它们嵌入在图像文件中的方式进行解析。
    从您发布的服务器端代码来看,您似乎只解析XMP标签。根据用于编码原始图像的软件,标签可能以另一种格式存储

尽管看起来很明显,我的建议是:
  1. 确保您的工作流程不涉及任何客户端发送到服务器上保存的内容之间的显式或隐式图像处理。
  2. 话虽如此,您还必须确保以适当的方式提取标签,具体取决于它们的格式。
JPEG文件可能非常难以正确处理,因为它们可能以各种方式存储。

在服务器端,只需获取流并将其作为图像写入文件。经过进一步调查发现,如果这些标签是从“Adobe Photoshop Lightroom”添加的,则会遇到问题。如果我们从Windows机器属性窗口添加相同的标签,则可以正常工作。 - Abdul Ahad
1
@AbdulAhad 我修改了我的答案来涵盖这个问题。你可能试图读取以前未用于存储它们的格式中的标签。例如,“Windows 机器”可以将它们存储在“XMP”中,但“Adobe Photoshop Lightroom”可以将它们存储在“EXIF”中。 - John-Philip
1
其实我对 Adobe Photoshop Lightroom 没有什么了解,但你说的可能是一个原因。我会尝试一下。 - Abdul Ahad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接