我有一个PHP的jQuery和jqGrd的Web应用程序;应用程序的功能之一是能够上传文件(在客户端,这由jqGrid处理)并将内容插入到数据库中。这一切都有效。我的问题是我还需要提供一个手动(或自动)文件上传的命令行机制。所以我有以下Python代码。该代码成功登录到我的API,我可以在PHP中看到我的POST数据,但是我在处理文件时出错。Python POST文件到PHP
我需要发布文件以同样的方式将是通过Web界面...这会导致被填充PHP的$ _FILES。用我的代码$ _FILES是空的。不知道我错过了什么。
import base64
import cookielib
import getopt
import os
import sys
import urllib
import urllib2
import MultipartPostHandler
...code to process command line args, log into api, get sessionId...
#
# import
#
opener = urllib2.build_opener(MultipartPostHandler.MultipartPostHandler)
headers = {'Cookie': 'PHPSESSID=' + sessionId}
params = {
'action': 'import',
'import': 'api',
'file': sourceFile,
'data': base64.b64encode(open(sourceFile, "rb").read()),
'id': id
}
urllib2.install_opener(urllib2.build_opener(MultipartPostHandler.MultipartPostHandler))
response = urllib2.urlopen(urllib2.Request(api, params, headers))
print response.read()
知道sourceFile只是在命令行中提供的字符串很重要;它不是文件本身。我认为这是问题。我在params ['data']中发送了params ['name']及其内容中的文件名字符串。我如何发送文件,就好像交互式地从网络表单提交它并将其包含在参数['file']中?这是我需要做的吗?
===编辑===
我不能使用任何模块,但我已经导入。感谢您提供其他建议,例如请求。
我认为你不需要指定数据。尝试 PARAMS = { '身份证': '身份证', '文件':开放(的资源文件, 'RB')} – Pixou
那么就没有数据。再次,sourceFile是一个字符串 - 不是文件本身(不是文件对象)。 – user1801810
本人来说我会用https://github.com/kennethreitz/requests代替我曾试图设置PARAM [“文件”],打开(的资源文件,“RB”)和没有工作的urllib2 –