Rbe*_*ben 1 php android content-type httpurlconnection content-disposition
我有一个Android应用程序,它将1个或多个zip文件发送到服务器.我想发送一些额外的表单数据和文件,因为表单数据将用于确定文件的处置.
我已经能够使用多部分作为内容类型上传文件,但我似乎无法在服务器端获取php以查看表单数据和文件.
我想知道的是如何使用android端的HTTPUrlConnection和服务器端的PHP将表单数据和文件列表发送到服务器.
我相信我的问题与Content-Type和Content-Disposition有关.如果有人能指出我一个明确的例子,或者解释我做错了什么,我真的很感激.
感谢您抽出宝贵时间来研究这个问题.
这是最新的,修订过的Android代码:
String postDriverUpload(File[] fileList) {
HttpURLConnection connection = null;
DataOutputStream outputStream = null;
String tag = TAG + "postDriverInfo()";
URL url = null;
String result = OK_TO_CONTINUE;
String targetUrl = server + "/upload.php";
try {
url = new URL(targetUrl);
} catch (MalformedURLException e) {
result = "ERROR: [" + targetUrl + "] can't be parsed into a URL.";
Log.e(tag, result, e);
return result;
}
try {
connection = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
result = "ERROR: IOException.";
Log.e(tag, result, e);
return result;
}
// Allow Inputs and Outputs
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
// Enable POST method
try {
connection.setRequestMethod("POST");
} catch (ProtocolException e) {
result = "Error: Protocol Exception.";
Log.e(tag, result, e);
return result;
}
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + BOUNDARY);
// Encode driver userName
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
try {
nameValuePairs.add(new BasicNameValuePair("userName", driver
.getUserName()));
Log.d(tag, "Encoded userName='driver' is: "
+ encodeData(nameValuePairs));
// Create output Stream to send data to server
outputStream = new DataOutputStream(connection.getOutputStream());
writeBoundary(outputStream);
outputStream
.writeBytes("Content-Disposition: form-data; name=\"userName\" "
+ EOL + EOL);
outputStream.writeBytes(driver.getUserName() + EOL);
writeBoundary(outputStream);
// Starting the Files part
outputStream
.writeBytes("Content-Disposition: form-data; name=\"files\" "
+ EOL + EOL);
outputStream.writeBytes("Content-Type: multipart/mixed; boundary="
+ FILE_BOUNDARY + EOL);
// Adding the file parts
for (File file : fileList) {
writeFileBoundary(outputStream);
// write out file
String contentType = String.format(
"Content-Disposition:file; filename=\"%s\"" + EOL
+ "Content-Type: application/x-zip-compressed",
file.getName())
+ EOL + EOL;
Log.d(tag, "Content-Type = " + contentType);
outputStream.write(contentType.getBytes());
}
writeFileBoundary(outputStream);
writeBoundary(outputStream);
outputStream.flush();
outputStream.close();
} catch (UnsupportedEncodingException e) {
result = "Error: UnsupportedEncodingException ";
Log.e(tag, result, e);
return result;
} catch (IOException e) {
result = "Error: IOException ";
Log.e(tag, result, e);
return result;
}
// Get Response from server (code and message)
try {
int serverResponseCode = connection.getResponseCode();
String serverResponseMessage = connection.getResponseMessage();
Log.d(tag, "Response Code = " + serverResponseCode);
Log.d(tag, "Response Message = " + serverResponseMessage);
} catch (IOException e) {
result = "Error getting response from server.";
Log.e(tag, result, e);
return result;
}
final StringBuilder out = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String line;
while (null != (line = in.readLine())) {
if (line.contains("ERROR")) {
Log.d(tag, "HTTPResponse: " + out.toString());
result = "Error: HTTPResponse: " + out.toString();
break;
}
out.append(line + "\n\n");
}
Log.d(tag, "HTTPResponse: " + out.toString());
} catch (IOException e) {
Log.w(tag, "WARNING: ", e);
}
return result;
}
void writeBoundary(DataOutputStream out) throws IOException {
final String twoHyphens = "--";
out.writeBytes(twoHyphens + BOUNDARY + EOL);
}
void writeFileBoundary(DataOutputStream out) throws IOException {
final String twoHyphens = "--";
out.writeBytes(twoHyphens + FILE_BOUNDARY + EOL);
}
Run Code Online (Sandbox Code Playgroud)
这是我在Android端登录的输出.正如您所看到的,key,userName和value,rbenjamin正在被正确加载到$ _POST变量中,但是某些事情并没有超过这一点.我用BOUNDARY分隔下一节,但它似乎吞噬了变量'files'的值.我很亲密,但我仍然缺少一些东西.(我在下面的日志文件中删除了大部分噪音.)
: Upload Button Clicked.
: Compiling upload file
: getting delivered SQL = SELECT * FROM deliveryorder WHERE delivereddatetime != ''
: uploadEnabled = true
: downloadEnabled = false
: driverEmail = ray.benjamin@gmail.com
: Starting, getting database.
: Found 1 drivers.
: Processing driver 1
: user name is rbenjamin
: email is ray.benjamin@gmail.com
: Uploading files using HTTP to http://192.168.1.17:8080
: There are 16 files.
: Checking download - enabled? false
: Encoded userName='driver' is: userName=rbenjamin
: Content-Type = Content-Disposition:file; filename="upload20130820_1015.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130820_1048.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1624.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1628.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1645.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1647.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1705.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1709.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1746.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1801.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1804.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1811.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1813.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_1821.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130821_2050.zip"
: Content-Type: application/x-zip-compressed
:
: Content-Type = Content-Disposition:file; filename="upload20130825_1957.zip"
: Content-Type: application/x-zip-compressed
:
: Response Code = 200
: Response Message = OK
: HTTPResponse: <!DOCTYPE html>
: <html>
: <body>
: POST is defined.<br>Key = userName"_, Value = rbenjamin<br>Key = files"_, Value = Content-Type: multipart/mixed; boundary=**FILE*BOUNDARY***25WLqf@***
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130820_1015.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130820_1048.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1624.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1628.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1645.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1647.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1705.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1709.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1746.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1801.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1804.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1811.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1813.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_1821.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130821_2050.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***
: Content-Disposition:file; filename="upload20130825_1957.zip"
: Content-Type: application/x-zip-compressed
: --**FILE*BOUNDARY***25WLqf@***<br>
: Notice: Undefined index: userName in /var/www-pbs/upload.php on line 15
: Call Stack:
: 0.0083 638888 1. {main}() /var/www-pbs/upload.php:0
: User Name is: <br>FILES is defined.<br>
: Notice: Undefined index: file in /var/www-pbs/upload.php on line 24
: Call Stack:
: 0.0083 638888 1. {main}() /var/www-pbs/upload.php:0
: <p>Dumping _FILES</p>
: Notice: Undefined index: file in /var/www-pbs/upload.php on line 34
: Call Stack:
: 0.0083 638888 1. {main}() /var/www-pbs/upload.php:0
: Notice: Undefined index: file in /var/www-pbs/upload.php on line 40
: Call Stack:
: 0.0083 638888 1. {main}() /var/www-pbs/upload.php:0
: Upload: <br>
: Notice: Undefined index: file in /var/www-pbs/upload.php on line 41
: Call Stack:
: 0.0083 638888 1. {main}() /var/www-pbs/upload.php:0
: Type : <br>
: Notice: Undefined index: file in /var/www-pbs/upload.php on line 42
: Call Stack:
: 0.0083 638888 1. {main}() /var/www-pbs/upload.php:0
: Size : 0 kB<br>
: Notice: Undefined index: file in /var/www-pbs/upload.php on line 43
: Call Stack:
: 0.0083 638888 1. {main}() /var/www-pbs/upload.php:0
: Stored in:
: Notice: Undefined index: file in /var/www-pbs/upload.php on line 45
: Call Stack:
: 0.0083 638888 1. {main}() /var/www-pbs/upload.php:0
: Notice: Undefined index: file in /var/www-pbs/upload.php on line 47
: Call Stack:
: 0.0083 638888 1. {main}() /var/www-pbs/upload.php:0
: already exists.
: </body>
: </html>
: 200
Run Code Online (Sandbox Code Playgroud)
没有人回答我的问题,但我最终找到了我需要的东西: 一篇关于以编程方式发送多部分表格的www.codejava.net文章.这正是医生所要求的.本文为您提供了一个MultipartUtility类,使用HTTPURLConnection可以轻松上传.它不仅是一个答案,而且是一个结构良好的答案.我不得不为Android调整一下,但不多.
| 归档时间: |
|
| 查看次数: |
5573 次 |
| 最近记录: |