问题:尝试上传大于~50 mb的文件,$ _FILES返回空数组。
我尝试更改php(很多组合)的限制,但它使用了...
我在java的课程:
public void upload() throws Exception {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(this.url);
try {
FileBody bin = new FileBody(this.file);
@SuppressWarnings("deprecation")
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("file", bin);
httppost.setEntity(reqEntity);
System.out.println("Requesting : " + httppost.getRequestLine());
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httppost, responseHandler);
System.out.println("responseBody : " + responseBody);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.getConnectionManager().shutdown();
}
}
我的php代码为respawn打印数组:
<?php
ini_set('file_uploads', 1);
ini_set('max_file_uploads', '9999999999M');
ini_set('post_max_size', '2000M');
ini_set('max_input_time', 3600);
ini_set('max_execution_time', 3600);
print_r($_FILES);
?>
答案 0 :(得分:0)
您可以在创建FileBody时尝试添加文件的mime类型。例如:
FileBody bin = new FileBody(this.file, "application/octect-stream");
另一种解决方案是使用更易于使用且不易出错的HttpURLConnection客户端。此外,Google recommends将其用于新的应用程序。
答案 1 :(得分:0)
一方或另一方正在破坏POST操作正在使用的http连接。
您知道哪一方(客户端或服务器)
如果您不知道,也许您应该尝试使用CURL来排除服务器以执行您的一个大(+50)文件的M-Multipart Post。
调用CURL上传并添加-v开关以进行详细日志,以便分析该过程。
对50 - 100 meg文件的Android POST操作应该可以正常工作。
由于您正在进行大量上传,因此您需要一个可以发送标题的客户端&#34;期望100继续&#34;你可以在哪里使用chunked transfer encoding以及一个客户端线程,该线程可以向缓冲区提供数据,缓冲区由byteArrayEntity
之类的东西包裹 std配置上的apache或nginX应该处理这个问题。如果您的php进程异常终止,那么您可能需要检查phpinfo。