Android 通过网络/本地主机发送大文件
代码如下:Android 通过网络/本地主机发送大文件,android,inputstream,large-files,outputstream,Android,Inputstream,Large Files,Outputstream,代码如下: private void sendFile(InputStream file, OutputStream out) throws IOException { Log.d(TAG, "trying to send file..."); final int buffer_size = 4096; try { byte[] bytes = new byte[buffer_size]; while
private void sendFile(InputStream file, OutputStream out) throws IOException {
Log.d(TAG, "trying to send file...");
final int buffer_size = 4096;
try {
byte[] bytes = new byte[buffer_size];
while(true) {
int count = file.read(bytes, 0, buffer_size);
if (count == -1) {
break;
}
out.write(bytes, 0, count);
Log.d("copystream", bytes + "");
}
} catch (Exception e) {
Log.e("copystream", "exception caught while sending file... " + e.getMessage());
}
}
我试图通过输出流(OutputStream out)发送一个大文件(InputStream文件)。这段代码适用于较小的文件,但对于5mb及以上的文件(我还没有测试过这个限制),它只是在一段时间后冻结,没有任何错误或任何东西
Log.d(“复制流”,字节+”)代码>将输出一段时间,但最终将停止日志记录
Log.e(“copystream”,“发送文件时捕获异常…”+e.getMessage())代码>从不显示
这是一个更大的代码库的一部分,它实际上是一个运行在Android设备上的文件服务器
有什么想法吗?使用多部分帖子。差不多
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null,null);
entity.addPart("File", new FileBody (new File(FILE_PATH), MIME_TYPE));
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
return response;
使用多部分POST。差不多
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null,null);
entity.addPart("File", new FileBody (new File(FILE_PATH), MIME_TYPE));
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
return response;
为此使用AsyncTask类,下面是链接示例
为此使用AsyncTask类,下面是链接示例
以下是它成功的原因:
while (true) {
synchronized (buffer) {
int amountRead = file.read(buffer);
if (amountRead == -1) {
break;
}
out.write(buffer, 0, amountRead);
}
}
以下是成功的原因:
while (true) {
synchronized (buffer) {
int amountRead = file.read(buffer);
if (amountRead == -1) {
break;
}
out.write(buffer, 0, amountRead);
}
}
我很确定问题出在服务器端。另外,我正试图在视频播放器中直接使用该文件(我正试图发送一个3gp文件)。我见过其他android web/文件服务器,其中一些确实存在这个问题。其中一个不是kWS,但遗憾的是我找不到它的源代码。对不起,我不是一个服务器的家伙,所以不能在这方面帮助你。我很确定问题是服务器端的。另外,我正试图在视频播放器中直接使用该文件(我正试图发送一个3gp文件)。我见过其他android web/文件服务器,其中一些确实存在这个问题。其中一个没有kWS,尽管很遗憾我找不到它的源代码。很抱歉,我不是一个服务器人员,所以不能在这方面帮助您。您可以在AsyncTask的doInBackground方法中编写while循环,以便操作系统为其分配单独的线程。我想这会解决你的问题。不。这将产生大量的AsyncTask(这个循环速度非常快),这弊大于利。您可以在AsyncTask的doInBackground方法中编写while循环,以便操作系统为其分配单独的线程。我想这会解决你的问题。不。这会让我产生大量的异步任务(这个循环进行得非常快),这弊大于利。