标题:请问各位大侠,我用filetostr将本地JPG文件保存到SQL2000的text字段,但提取 ...
只看楼主
zaqqazxx
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-8-27
结帖率:0
已结贴  问题点数:10 回复次数:10 
请问各位大侠,我用filetostr将本地JPG文件保存到SQL2000的text字段,但提取时少了10 ...
请问各位大侠,我用filetostr将本地JPG文件转换成二进制保存到SQL2000的text字段,但用strtofile提取时少了10多K,且JPG文件不能正常显示!请问是何原因?
搜索更多相关主题的帖子: 本地 JPG 文件 字段 提取 
2019-08-28 12:41
zaqqazxx
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-8-27
得分:0 
而我在用本地表(备注型(二进制))测试时是完全正常的,能够完整提取并正确显示JPG 文件。
2019-08-28 12:58
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
得分:5 
回复 2楼 zaqqazxx
程序代码:
**上传
cStr=STRCONV(FILETOSTR(up_filename),13)  &&将单字节字符转换为编码base64二进制数据

**下载
cStrChr=""
cStrHex=""
FOR nmI=1 TO 10000000  &&分段下载
  sqlstring = " select substring(图片字段," + STR(nmI-1) + " *8000 + 1,8000) ImgField from 表名 "
  cStrHex = STRCONV(ImgField,14) &&返回原始编码
  cStrChr = cStrChr + cStrHex
endfor

nFcreat = Fcreat(filename)
Fwrite(nFcreat,cStrChr)
Fflush(nFcreat)
Fclose(nFcreat)

2019-08-28 13:26
zaqqazxx
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-8-27
得分:0 
cStr=STRCONV(FILETOSTR(up_filename),13)

第一句显示“函数参数值类型”无效
2019-08-28 13:39
zaqqazxx
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-8-27
得分:0 
cStr=STRCONV(FILETOSTR("c:\a1.jpg"),13)

第一句显示“函数参数值类型”无效
2019-08-28 13:41
zaqqazxx
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-8-27
得分:0 
不好意思,本人用的是vfp6,好像没有strconv函数
2019-08-28 18:34
zaqqazxx
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-8-27
得分:0 
难道vfp6就无法实现上传sql与传回本地二进制字符了吗?各位大侠帮帮忙呀!多谢了
2019-08-28 18:49
zaqqazxx
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2019-8-27
得分:0 
如果在vfp6下完美解决,有酬谢,有意加微15504045919
本人手上有个项目,也可合作开发,有意的高手可详谈
2019-08-28 19:57
radiofan
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:466
专家分:696
注 册:2006-7-30
得分:0 
以下是引用zaqqazxx在2019-8-28 19:57:23的发言:

如果在vfp6下完美解决,有酬谢,有意加微15504045919
本人手上有个项目,也可合作开发,有意的高手可详谈

为啥不升级到VFP9?
2019-08-29 09:57
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
以下是引用zaqqazxx在2019-8-28 19:57:23的发言:

如果在vfp6下完美解决,有酬谢,有意加微15504045919
本人手上有个项目,也可合作开发,有意的高手可详谈

试试看能否换点金子
#DEFINE CRYPT_STRING_BASE64    0x00000001
#DEFINE CRYPT_STRING_NOCRLF    0x40000000
DECLARE LONG CryptBinaryToStringA IN crypt32 STRING@, LONG, LONG, STRING@, LONG@
DECLARE LONG CryptStringToBinaryA IN crypt32 STRING@, LONG, LONG, STRING@, LONG@, LONG@, LONG@

cStr = "中国"
? _Base64Encode(cStr)
? _Base64Decode(_Base64Encode(cStr))
RETURN

FUNCTION _Base64Encode(cStr)
    LOCAL nBase64DataLen, cBase64Data
    nBase64DataLen = 0
    IF CryptBinaryToStringA(cStr, LEN(cStr), CRYPT_STRING_BASE64+CRYPT_STRING_NOCRLF, NULL, @nBase64DataLen)==0
        MESSAGEBOX("获取编码后的数据长度失败")
        RETURN ""
    ENDIF
    cBase64Data = SPACE(nBase64DataLen+1)
    IF CryptBinaryToStringA(cStr, LEN(cStr), CRYPT_STRING_BASE64+CRYPT_STRING_NOCRLF, @cBase64Data, @nBase64DataLen)==0
        MESSAGEBOX("Base64编码失败")
        RETURN ""
    ENDIF
    RETURN LEFT(cBase64Data,AT(CHR(0),cBase64Data)-1)
ENDFUNC

FUNCTION _Base64Decode(cBase64Str)
    LOCAL nOutLen,cStr
    nOutLen = 0
    IF CryptStringToBinaryA(cBase64Str,LEN(cBase64Str),CRYPT_STRING_BASE64,0,@nOutLen,0,0)==0
        MESSAGEBOX("获取解码数据长度失败")
        RETURN ""
    ENDIF
    cStr = SPACE(nOutLen)
    IF CryptStringToBinaryA(cBase64Str,LEN(cBase64Str),CRYPT_STRING_BASE64,@cStr,@nOutLen,0,0)==0
        MESSAGEBOX("Base64解码失败")
        RETURN ""
    ENDIF
    RETURN cStr
ENDFUNC
2019-08-29 12:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-496600-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.261352 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved