我正在从我的Android应用程序上传大型视频文件,显示进度条。似乎上传卡在4-5兆字节之间,然后重新启动。我可以通过CURL或浏览器上传到该服务,因此不服务的限制。
是否可以在某处配置上传文件大小限制?
上传代码:
HttpClient client = new DefaultHttpClient();
HttpContext httpContext = new BasicHttpContext();
HttpPost post = new HttpPost("http://myservic/videos");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody("title", title);
builder.addBinaryBody("file", file);
HttpEntity entity = new ProgressEntity(builder.build(), listener);
post.setEntity(entity);
try {
HttpResponse response = client.execute(post, httpContext);
} catch (IOException e) {
} catch (JSONException e) {
ProgressEntity.java
public class ProgressEntity implements HttpEntity {
private final HttpEntity inner;
private final UploadProgressListener uploadProgressListener;
public ProgressEntity(HttpEntity entity, UploadProgressListener listener) {
this.inner = entity;
this.uploadProgressListener = listener;
}
@Override
public boolean isRepeatable() {
return inner.isRepeatable();
}
@Override
public boolean isChunked() {
return inner.isChunked();
}
@Override
public long getContentLength() {
return inner.getContentLength();
}
@Override
public Header getContentType() {
return inner.getContentType();
}
@Override
public Header getContentEncoding() {
return inner.getContentEncoding();
}
@Override
public InputStream getContent() throws IOException, IllegalStateException {
return inner.getContent();
}
@Override
public void writeTo(OutputStream outputStream) throws IOException {
inner.writeTo(new ProgressOutputStream(outputStream, uploadProgressListener));
}
@Override
public boolean isStreaming() {
return inner.isStreaming();
}
@Override
public void consumeContent() throws IOException {
inner.consumeContent();
}
}
ProgressOutputStream.java:
public class ProgressOutputStream extends FilterOutputStream {
private final UploadProgressListener listener;
private int totalBytesWritten;
private int since;
public ProgressOutputStream(OutputStream outputStream, UploadProgressListener uploadProgressListener) {
super(outputStream);
listener = uploadProgressListener;
totalBytesWritten = 0;
since = 0;
}
@Override
public void write(int oneByte) throws IOException {
super.write(oneByte);
appendWritten(1);
}
private void appendWritten(int i) throws IOException {
totalBytesWritten += i;
if (totalBytesWritten - since > 1024 * 1024) {
listener.outputWritten(totalBytesWritten);
since = totalBytesWritten;
}
}
@Override
public void write(byte[] buffer) throws IOException {
super.write(buffer);
appendWritten(buffer.length);
}
@Override
public void write(byte[] buffer, int offset, int length) throws IOException {
super.write(buffer, offset, length);
appendWritten(length);
}
}