1

pycurl を使用してファイルを Processmaker にアップロードしようとしています。app、self.usr、および doc は文字列です。file は django ファイル フィールド オブジェクトです。私は現在、オブジェクトを渡しています。間違ったオブジェクト/タイプ/ものを ATTACH_FILE フィールドに渡しているだけだと確信しています。

動作中の php POSTFIELDS 定義は次のようになります。

$params = array (
'ATTACH_FILE'  => '@/home/test.txt',
'APPLICATION'  => $resultCase->caseId,
'INDEX'        => 1,
'USR_UID'      => $oRandomUser->guid,
'DOC_UID'      => '3154812864d55a6e017ff65089604572',
'APP_DOC_TYPE' => 'INPUT',
'TITLE'        => "Initial document".date("Y-m-d H:i:s"),
'COMMENT'      => "this document was uploaded by the system"

curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

そして現在壊れているpython:

    c = pycurl.Curl()
    data = [
            ('ATTACH_FILE', (pycurl.READFUNCTION, file.read)),
            ('APPLICATION', app),  
            ('INDEX' , 1),
            ('USR_UID', self.usr),
            ('DOC_UID', doc),
            ('APP_DOC_TYPE', 'INPUT')
           ]

    post = urllib.urlencode(data)

    print post

    url = "http://192.168.51.155/sysworkflow/en/green/services/upload"

    c.setopt(pycurl.URL, url)
    c.setopt(pycurl.VERBOSE, 1)
    c.setopt(pycurl.POST, 1)
    c.setopt(pycurl.POSTFIELDS, post)

    c.perform()

    c.close()

何か案は?

4

1 に答える 1

3

私は自分の問題を解決する方法を見つけました。ここにあるポスターを使用して、私が行ったことは次のとおりです。http: //atlee.ca/software/poster/次のことを行いました。

from poster.streaminghttp import register_openers
import poster

register_openers()

url = "http://192.168.51.155/sysworkflow/en/green/services/upload"

params = { 
'APPLICATION' : app,  
'INDEX' : 1,
'USR_UID' : self.usr,
'DOC_UID' : doc,
'APP_DOC_TYPE' : 'INPUT',
'TITLE' : 'Test',
'ATTACH_FILE' : open(file.path, "rb")
}

datagen, headers = poster.encode.multipart_encode(params)
request = urllib2.Request(url, datagen, headers)
result = urllib2.urlopen(request)
print result.read()

pycurlよりもはるかに使いやすいです!私の最初の試みの問題は、POSTFIELDがファイルを受け入れることができず(ラングリングなしで)、HTTPPOSTオプションを使用するとファイルを処理できますが、ファイルデータとフィールドデータの両方を処理するのが難しいことでした。

于 2011-02-22T18:48:12.280 に答える