PB中POSTURL函式呼叫的引數,要上傳的資料只有一個引數ls_arg,但如果還有檔案,如何上傳該檔案? 把檔案以String格式讀取并和其它引數合并并轉化為BLOB? 還是有其他方法可以解決?
uj5u.com熱心網友回復:
上傳二進制檔案有點麻煩,給你段代碼你參考一下
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
uj5u.com熱心網友回復:
不能通過引數來上傳了,以前的代碼是我的pb12里使用到的uj5u.com熱心網友回復:
謝謝PB人生,您在#2中說的"不能通過引數來上傳了,是什么意思? 是否意味#1中講的方法不可行?"我用的是10.5版本,iir_msgbox物件中,沒有ib_data屬性的,是否該屬性在12版本中才有?
uj5u.com熱心網友回復:
不是那個意思,是不能直接通過你寫的那個引數來上傳“PB中POSTURL函式呼叫的引數,要上傳的資料只有一個引數ls_arg,”,必須使用1#的方法
uj5u.com熱心網友回復:
我用的是10.5版本,iir_msgbox物件中,沒有ib_data屬性的,是否該屬性在12版本中才有?答復:ib_data是在iir_msgbox里定義的一個實體變數,自己定義即可
blob ib_data
uj5u.com熱心網友回復:
如上的要求,已有朋友用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來實作
uj5u.com熱心網友回復:
謝謝PB人生,我還有二問題1 http頁面要求我上傳的引數中,既有普通的string,又有檔案,如:
arg1=a&arg2=b&arg3=c,同時還有檔案 arg_file,我又該如何改造#1中的代碼?
2 ib_data是實體變數,是否通過internetdata函式中的data引數得到,這是異步的,主回圈陳述句是否繼續下一條如何使用這引數
uj5u.com熱心網友回復:
1 http頁面要求我上傳的引數中,既有普通的string,又有檔案,如:arg1=a&arg2=b&arg3=c,同時還有檔案 arg_file,我又該如何改造#1中的代碼?
答:我一般通過檔案名里進行處理,因為檔案名可以放一些內容
2 ib_data是實體變數,是否通過internetdata函式中的data引數得到,這是異步的,主回圈陳述句是否繼續下一條如何使用這引數
答:你繼承internetresult時,有個函式internetdata,在里面寫代碼
ib_data = data
return 1
即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/48217.html
標籤:Web 應用
上一篇:PB9.0呼叫水晶報表9.2
