我有一个ASP.Net应用程序,需要显示存储在Filemaker容器字段中的图像。我的查询语句如下:
SELECT GetAs(Image, 'JPG') FROM UA_Item_Pictures WHERE "Stock Number" = 33989 AND ImageOrder = 1
根据文件: 您可以从FileMaker数据库文件中的容器字段检索的可能的文件类型(区分大小写)是:
'EMBO' OLE容器数据
'PDF' 可移植文档格式
'EMF +' Windows增强型Metafile Plus
'PICT' Mac OS(没有基于文件的512字节标题)
'每股收益' 嵌入式PostScript
'PNGf' 位图图像格式
'文件' 插入文件命令的结果
'PNTG' MacPaint格式
'FPIX' Flash(FPX)
'QTIF' QuickTime图像文件
'FORK' 资源分叉(Mac OS)
'SGI' 通用位图格式
'吉夫' 图形交换格式
'snd' 标准声音(Mac OS原始格式)
'JPEG' 摄影图像
'TIFF' 数字图像的光栅文件格式
'JP2' JPEG 2000
'TPIC' 的Targa
'META' Windows图元文件(增强版)
'XMLO' 布局对象
'METO' Windows图元文件(原始版)
'8BPS' PhotoShop(PSD)
'moov' 逻辑 旧QuickTime格式(Mac OS)
所以有了这些信息,我的问题是:
任何建议都会非常感谢!
答案 0 :(得分:0)
购买SuperContainer的许可证(无耻的插件警报:我是作者之一)和Mac Mini来托管它。将文件移出容器字段并移入SuperContainer,让SuperContainer通过点击OS X的CoreImage库来渲染文件的图像版本。
答案 1 :(得分:0)
谢谢,但我想我发现了发生了什么。如果我在图像表和另一个表之间进行内部连接,则不会返回图像(或正确返回...不确定哪个)。只要我直接对图像表运行查询,就会返回图像。
所以这不起作用: select * from tradition_table b inner join image_table i on b.stocknumber = i.stocknumber 其中b.stocknumber = 12345
但是这样做: select * from image_table where stocknumber = 12345
这意味着我必须运行2个单独的查询,但至少我看到数据!!
答案 2 :(得分:0)
如果您无法预测文件类型是什么,AND / OR您需要使用其他扩展(例如docx,xlsx等),那么您可以专门为所有存储和检索脚本使用“FILE”。
但是这样做意味着FileMaker本身不知道如何处理和打开文件。换句话说,使用FileMaker时,您需要手动导出字段的内容以进行编辑/查看,而不是简单地双击该字段并打开文件。因此,设置对FileMaker有利,或对您的外部应用程序有利。
如果这样做,容器字段中的所有文件都将被称为“Untitled.dat”,其内部名称将为“?”,因此您还需要在另一个字段中存储实际文件名或其扩展名所以你以后可以打开它。
答案 3 :(得分:0)
这是因为您使用的是JPG而不是JPEG,事实上,您的问题会自行解决。你可以这样读它
SELECT GetAs(Image, 'JPEG') ...
然后,如果您正在使用ado.net,请以这种方式阅读
var bytesLength = reader.GetBytes(0, 0, null, 0, 0);
var buffer = new Byte[bytesLength];
var bytes = reader.GetBytes(0, 0, buffer, 0, (int)bytesLength);
using (var fileStream = new FileStream(String.Format("{0}.jpg", Guid.NewGuid().ToString()), FileMode.Create, FileAccess.Write)) {
fileStream.Write(buffer, 0, buffer.Length);
}
在GetBytes函数的开始处,0是照片字段的索引。