如何通过posturl上传文件?

苦命的程序员 2014-01-18 03:11:22
PB中POSTURL函数调用的参数,要上传的数据只有一个参数ls_arg,但如果还有文件,如何上传该文件? 把文件以String格式读取并和其它参数合并并转化为BLOB? 还是有其他方法可以解决?
...全文
1548 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
苦命的程序员 2014-01-21
  • 打赏
  • 举报
回复
谢谢PB人生,我还有二问题 1 http页面要求我上传的参数中,既有普通的string,又有文件,如: arg1=a&arg2=b&arg3=c,同时还有文件 arg_file,我又该如何改造#1中的代码? 2 ib_data是实例变量,是否通过internetdata函数中的data参数得到,这是异步的,主循环语句是否继续下一条如何使用这参数
WorldMobile 2014-01-21
  • 打赏
  • 举报
回复
1 http页面要求我上传的参数中,既有普通的string,又有文件,如: arg1=a&arg2=b&arg3=c,同时还有文件 arg_file,我又该如何改造#1中的代码? 答:我一般通过文件名里进行处理,因为文件名可以放一些内容 2 ib_data是实例变量,是否通过internetdata函数中的data参数得到,这是异步的,主循环语句是否继续下一条如何使用这参数 答:你继承internetresult时,有个函数internetdata,在里面写代码 ib_data = data return 1 即可
苦命的程序员 2014-01-20
  • 打赏
  • 举报
回复
谢谢PB人生,您在#2中说的"不能通过参数来上传了,是什么意思? 是否意味#1中讲的方法不可行?" 我用的是10.5版本,iir_msgbox对象中,没有ib_data属性的,是否该属性在12版本中才有?
苦命的程序员 2014-01-20
  • 打赏
  • 举报
回复
如上的要求,已有朋友用JAVA实现了 一边 String url="http://localhost:8080/notary_sys/syncCertPic.html"; PostMethod postMethod = new PostMethod(url); HttpClient httpClient = new HttpClient(); BufferedInputStream bis = null; int connectTimeout=20000; int readTimeout=120000; HttpConnectionManagerParams managerParams = httpClient.getHttpConnectionManager().getParams(); // 设置连接超时时间(单位毫秒) managerParams.setConnectionTimeout(connectTimeout); // 设置读数据超时时间(单位毫秒) managerParams.setSoTimeout(readTimeout); postMethod.getParams().setContentCharset("utf-8"); int status; File image=new File("E:\\imageUtils\\1383384120430.pdf"); InputStream is=null; try { is = new FileInputStream(image); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); byte[] buff = new byte[100]; //buff用于存放循环读取的临时数据 int rc = 0; try { while ((rc = is.read(buff, 0, 100)) > 0) { swapStream.write(buff, 0, rc); } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } byte[] in_b = swapStream.toByteArray(); java.io.ByteArrayInputStream bInput = new java.io.ByteArrayInputStream(in_b); try { postMethod.setRequestHeader("Content-Type", "application/octet-stream"); RequestEntity re = new InputStreamRequestEntity(bInput); postMethod.setRequestEntity(re); NameValuePair params = new NameValuePair(); params.setName("years"); params.setValue("2013"); NameValuePair params1 = new NameValuePair(); params1.setName("certType"); params1.setValue(""); NameValuePair params2 = new NameValuePair(); params2.setName("certNo"); params2.setValue("47321"); NameValuePair params3 = new NameValuePair(); params3.setName("imageType"); params3.setValue("0"); NameValuePair params4 = new NameValuePair(); params4.setName("fileIndex"); params4.setValue("2"); postMethod.setQueryString(new NameValuePair[]{params,params1,params2,params3,params4}); status = httpClient.executeMethod(postMethod); bis=new BufferedInputStream(postMethod.getResponseBodyAsStream()); StringBuffer sb=new StringBuffer(); int c; while((c=bis.read())!=-1) { sb.append((char)(c)); } String resultStr = new String(sb.toString().getBytes("iso-8859-1"),"utf-8"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } 现在的问题是如何用PB来实现
WorldMobile 2014-01-20
  • 打赏
  • 举报
回复
我用的是10.5版本,iir_msgbox对象中,没有ib_data属性的,是否该属性在12版本中才有? 答复:ib_data是在iir_msgbox里定义的一个实例变量,自己定义即可 blob ib_data
WorldMobile 2014-01-20
  • 打赏
  • 举报
回复
引用 3 楼 u013510134 的回复:
谢谢PB人生,您在#2中说的"不能通过参数来上传了,是什么意思? 是否意味#1中讲的方法不可行?" 我用的是10.5版本,iir_msgbox对象中,没有ib_data属性的,是否该属性在12版本中才有?
不是那个意思,是不能直接通过你写的那个参数来上传“PB中POSTURL函数调用的参数,要上传的数据只有一个参数ls_arg,”,必须使用1#的方法
WorldMobile 2014-01-18
  • 打赏
  • 举报
回复
不能通过参数来上传了,以前的代码是我的pb12里使用到的
WorldMobile 2014-01-18
  • 打赏
  • 举报
回复
引用 楼主 u013510134 的回复:
PB中POSTURL函数调用的参数,要上传的数据只有一个参数ls_arg,但如果还有文件,如何上传该文件? 把文件以String格式读取并和其它参数合并并转化为BLOB? 还是有其他方法可以解决?
上传二进制文件有点麻烦,给你段代码你参考一下 string ls_url, ls_data, ls_args, ls_header, ls_sql, ls_boundary blob lblb_args, lb_data long ll_cpu, ll_i, ll_length int li_rc ls_url = "http://localhost/PostUpdateBlob" ls_boundary = "---------------------------7db15a14291cce"//----------7db15a14291cce" ls_args += "--" + ls_boundary + "~r~n" ls_args += 'Content-Disposition: form-data; name="file"; filename="aaa.dat"~r~n' //name必须为file ls_args += 'Content-Type: application/octet-stream~r~n' ls_args += '~r~n' lblb_args = Blob(ls_args, EncodingUTF8!) + ab_data + Blob('~r~n~r~n--' + ls_boundary + '--~r~n', EncodingUTF8!) ll_length = Len(lblb_args) ls_header = "Content-Type: multipart/form-data; boundary=" + ls_boundary + "~r~n" + & "Content-Length: " + String( ll_length ) + "~r~n~r~n~r~n" li_rc = iinet_base.PostURL(ls_url, lblb_args, ls_header, ii_httpPort, iir_msgbox) if li_rc = 1 then ls_data = string(iir_msgbox.ib_data, EncodingUTF8!) return true else messagebox('PostUrl error', li_rc) return false end if

662

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder Web 应用
社区管理员
  • Web 应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧