Страница 1 из 1

Закачка больших файлов на SD

Добавлено: 24 фев 2014, 17:31
Артем Дегтев
Всем привет.
Возникла проблема - необходимо закачивать на девайся файлы размером больше 200 Mb, если у кого то есть метод для реализации задачи подскажите как сделать... Реализованный мной метод не способен скачивать большие файлы, выскакивает OOM.
Ниже мой метод:

Код: Выделить всё

public void LoadFile(String src) {
		String File_Name = null;
		int n = src.lastIndexOf("/");
		File_Name = src.substring(n + 1, src.length());
		URL url;
		URLConnection con;
		DataInputStream dis;
		FileOutputStream fos = null;
		byte[] fileData;
		try {
			url = new URL(src);
			con = url.openConnection();
			dis = new DataInputStream(con.getInputStream());
			fileData = new byte[con.getContentLength()];
			for (int q = 0; q < fileData.length; q++) {
				fileData[q] = dis.readByte();
			}
			dis.close();
		
			
			fos = new FileOutputStream(new File(Path_avi_filies + File_Name));
			fos.write(fileData);
			fos.close();
		} catch (Exception m) {
			Log.e("Errol load and save avi file", m + "");
		}

	}

Re: Закачка больших файлов на SD

Добавлено: 13 мар 2014, 18:05
altwin
можно запустить несколько потоков, загрузить файл частями и собрать его. https://github.com/yingyixu/android-download-manager
Правда автор Китаец, что накладывает некоторые ограничения :)... потому как варриант, что -то вроде:
[syntax=java5]
public class uploadFile extends AsyncTask<Void, Void, Boolean> {
private final ProgressDialog dialog = new ProgressDialog(parentActivity);

protected void onPreExecute() {
this.dialog.setMessage("Uploading file");
this.dialog.setCancelable(false);
this.dialog.show();
}

@Override
protected Boolean doInBackground(Void... arg0) {

try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost(URLS.PRESCRIPTION_POST_URL);
MultipartEntity reqEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);

reqEntity.addPart("title", new StringBody("This is a title of video file"));
try {
File f = new File(Environment.getExternalStorageDirectory(), "your file name with extension");

FileBody body = new FileBody(f);
reqEntity.addPart("parameter that server will read", body);

} catch (Exception e) {
reqEntity.addPart("parameter that server will read", new StringBody(""));
}

reqEntity.addPart("description", new StringBody("description"));

postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest);

BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String sResponse; StringBuilder s = new StringBuilder();
while ((sResponse = reader.readLine()) != null) {
s = s.append(sResponse);
}
Log.v("Response for POst", s.toString());
return true;
} catch (Exception e) {
Log.e("MyPharmacyOptions", "Error :: " + e);
}
return false;
}

@Override
protected void onPostExecute(Boolean result) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
if (result) {
Toast.makeText(parentActivity,
"File uploaded successfully", Toast.LENGTH_LONG)
.show();

} else {
Toast.makeText(parentActivity, "Your Request not complete",
Toast.LENGTH_LONG).show();
}
}
}
[/syntax]