三层分布式结构下,通过服务器端的Remote Data Module中的函数的参数,是否能够传输图片?
因为对数据表修改后,是通过调用服务器端函数完成保存操作。现在有一字段是image(用户存放图片)类型的,通过什么方法能将图片放在函数的参数中,同其他字段一起传递给服务器?
因为对数据表修改后,是通过调用服务器端函数完成保存操作。现在有一字段是image(用户存放图片)类型的,通过什么方法能将图片放在函数的参数中,同其他字段一起传递给服务器?
解决方案 »
- fastreport rich的问题
- 控制Excel的问题,解决马上给分!
- 一台电脑可以接多台条码扫描仪吗?
- 急!!!一个linux下安装jdk,tomcat的问题。安装完成后,能用java 测试,但是。。。。。。。
- 100分求助解一道高中数学题!
- 进来看看吧---DELPHI小问题?
- 一个关于 获得系统时间的 函数
- 退出系统的提示框不安全?
- 如何在FormCreate中创建combobox的items?
- 谁有在stringgrid中,当单元格改变后按tab,up,down时,单元格内容不变,按enter时改变的程序源码,急!!
- 这种格式的数据怎么把他分开读取出来呢?
- 菜鸟的WideString问题
我用的是位图,图片自身就是二进制的吧,还是需要用函数转换成二进制?如果转成二进制,该用什么类型的变量传递,服务器端用什么类型的变量接收?
=========================================
procedure ReadFile(const FileName: WideString; var Packet: OleVariant);
var
TempStream:TFileStream;
Param:OleVariant;
p:Pointer;
begin
TempStream:=TFileStream.Create(String(FileName),fmOpenRead);
try
Param:=VarArrayCreate([0,TempStream.Size-1],varByte);
p:=VarArrayLock(Param);
try
TempStream.Position:=0;
TempStream.Read(p^,TempStream.Size);
finally
VarArrayUnlock(Param);
end;
finally
TempStream.Free;
end;
Packet:=Param;
end;
=========================================
function WriteFile(var Stream: OleVariant;
const FileName: WideString): SYSINT;
var
OutStream:TFileStream;
p:Pointer;
begin
Result:=-1;
p:=VarArrayLock(Stream);
OutStream:=TFileStream.Create(String(FileName),fmCreate);
try
OutStream.Write(p^,VarArrayHighBound(Stream,1)+1);
finally
VarArrayUnlock(Stream);
OutStream.Free;
end;
Result:=0;
end;
1 将图片流转换成字符串,然后用字符串数组保存字符串(因为图片流转成字符串后包含有#0等特殊字符,传输时字符串会被截断),再传给服务器。但是服务器那端的函数的参数类型中没有普通的数组类型,通常传递数组是用变体数组传递的。若是将字符数组中的每个字符赋给变体数组的每个元素,变体数组会将字符自动转换成字符串保存,这样那些特殊字符(如#0)还是没法传递过去。不知有没有解决的办法?
2 将转成的字符串中的#0等特殊字符替换成一个特殊的字符串,在服务器端在反向转换一下,很麻烦。
3 使用IPicture接口,但是我们用的是socket端口,好像IPicture只支持COM连接。
4 是不是可以将图片对象存在变体中,然后将整个图片传递过去?
5 如果能够将图片转成二进制格式传输应该没问题,但我不知道如何转换。使用什么函数转换,又该用什么类型的参数变量传递?
现在就能想到这些办法,还望各位大侠出手指点啊!!!
先将图片流中的每个字节转换成数字ASCII码,存入整型数组中传递给服务器。再在服务器端将ASCII码转成字符,并连成字符串,赋给image类型的字段。这样图像就保存成功了。