免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3295 | 回复: 4
打印 上一主题 下一主题

关于上传文件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-01-06 11:42 |只看该作者 |倒序浏览
这是我关于上传文件的一段代码,为何上传文件大于32765时,文件FILEREAD()出来的总是比FIELLENGTH()要多出几百K的大小?帮忙看下,或者说关于上传文件的程序是怎么写的,给我个参考,多谢!
string ls_path,ls_name
ls_path = string(sle_3.text)
       
   long ls_len,i,j

for i = 1 to parent.dw_1.rowcount()
        blob ls_file,ls_pic
        long li_i
        ls_name = parent.dw_1.object.file_name
                IF  NOT (fileexists(ls_path + '\'+ ls_name)) THEN //17
                messagebox("提示",ls_name + "不存在,请检查!")
                RETURN
           END IF
//        messagebox("1",ls_path + '\'+ ls_name)
       
        ls_len = filelength(ls_path + '\'+ ls_name)
        li_I =  FILEOPEN(ls_path + '\'+ ls_name,STREAMMODE!)
        if li_I <> -1 then
//                        Yield()
                        FOR j=1 TO CEILING(ls_len/32765)
                                FILEREAD(LI_I,ls_pic)
                                ls_file = ls_file+ls_pic
//                                FILESEEK(LI_I,32765*j,FROMBEGINNING!)
                        NEXT
        end if
        FILECLOSE(LI_I)
        if ls_len = len(ls_file) then
                UPDATEBLOB sys_files set file_string = :ls_file where file_name = :ls_name;
                if sqlca.sqlcode =  0 then
                        commit;
                        parent.dw_1.object.file_path = '上传成功!'
                else
                        rollback;
                        messagebox('提示:','上传文件'+ls_name+ '出错!')
                        parent.dw_1.object.file_path = '上传失败!'
                        exit
                        return                       
                end if
        else
                messagebox('提示:','读取文件'+ls_name+ '出错!')
                messagebox('提示:','ls_len='+ string(ls_len)+',len(ls_file)'+string(len(ls_file)))
                parent.dw_1.object.file_path = '读取文件'+ls_name+ '出错!'
                exit
                return
        end if
        parent.dw_1.accepttext()
       
next

结果总是LEN(LS_FILE) > FILELENGTH()

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2008-01-08 08:39 |只看该作者
楼上,你这是 PowerBuild 语言的代码。

论坛徽章:
0
3 [报告]
发表于 2008-01-08 19:12 |只看该作者
那是因为你的ls_pic变量使用blob类型,假如文件长度不大于32765或者是32765的整数倍,应该没有问题,不然每次 ls_file = ls_file+ls_pic 时ls_pic的长度总是32765,包括最后一次也是,这就有问题了,所以在读完之后再执行如下调整命令:ls_file = BlobMid(ls_file, 1, ls_len)

PS: PB有一套严格的命名规范,比如ls_len应该命名为ll_len,li_i应该为ll_i。。。

论坛徽章:
0
4 [报告]
发表于 2008-01-11 18:02 |只看该作者
感谢三楼的!

论坛徽章:
0
5 [报告]
发表于 2008-01-11 22:58 |只看该作者
原帖由 liu_mack 于 2008-1-11 18:02 发表
感谢三楼的!


好的,不客气~

喜欢礼尚往来的,不喜欢丢下一个问题后不见人影的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP