在对外提供各种语言SDK的时候经常会遇到需要上传文件的问题,例如在python中我们可以借助pycurl库实现这个功能。
项目地址
https://github.com/pycurl/pycurl
示例代码
import pycurl
import StringIO
# 用于执行http请求的通用函数
# post_data: post参数字符串
# upload_file: dict类型,需要有file_path(指定要上传的文件路径)和file_name(指定上传后的文件名)
def do_http_request(method, url, post_data='', upload_file=None):
ch = pycurl.Curl()
buf = StringIO.StringIO()
ch.setopt(ch.URL, url)
ch.setopt(ch.CUSTOMREQUEST, method)
if upload_file != None:
ch.setopt(ch.HTTPPOST, [('file', (ch.FORM_FILE, upload_file['file_path'], \
ch.FORM_FILENAME, upload_file['file_name']))])
else:
if method == self.METHOD_POST:
ch.setopt(ch.POSTFIELDS, urlencode(post_data))
ch.setopt(ch.TIMEOUT, 30)
ch.setopt(ch.WRITEFUNCTION, buf.write)
ch.perform()
content = buf.getvalue()
buf.close()
ch.close()
return content
上面的代码是一个用pycurl库写的调用http请求的通用函数,如果upload_file不为None,则表示需要上传文件,upload_file是一个dict类型,需要有两个key,file_path(指定要上传的文件路径)和file_name(指定上传后的文件名)。
ch.FORM_FILE:指定要上传文件的路径
ch.FORM_FILENAME:指定要上传文件的文件名