Skip to content

Instantly share code, notes, and snippets.

@slightfoot
Created April 13, 2018 22:14
Show Gist options
  • Save slightfoot/6f502205aca15e3cbf461df879673b56 to your computer and use it in GitHub Desktop.
Save slightfoot/6f502205aca15e3cbf461df879673b56 to your computer and use it in GitHub Desktop.
Download file in Dart/Flutter
static var httpClient = new HttpClient();
Future<File> _downloadFile(String url, String filename) async {
var request = await httpClient.getUrl(Uri.parse(url));
var response = await request.close();
var bytes = await consolidateHttpClientResponseBytes(response);
String dir = (await getApplicationDocumentsDirectory()).path;
File file = new File('$dir/$filename');
await file.writeAsBytes(bytes);
return file;
}
@dokinkon
Copy link

downloads_path_provider

i would not suggest downloads_path_provider because its build.gradle is set to compileSdkVersion 27 which results in build failures when creating signed apks. the issue page also is disabled so nobody could create a new issue and inform the author about it and it is currently archived since he said it has a lot of inconsistencies.

+1. I also found it always download failed in Android release build

@devsociety-we
Copy link

Hello Guys, You can use the plugin I created to save file and download the same on web
File Saver

@seunghwanly
Copy link

I found a way to download files in Flutter Web using html.AnchorElement().
I hope this sample code would be helpful :)

sample code is downloading file from Firebase Storage

Future<void> downloadFile(String imagePath) async {
    // 1) set url 
    String downloadURL = await firebaseStorage.FirebaseStorage.instance.ref(imagePath).getDownloadURL();
    // 2) request
    html.AnchorElement anchorElement = new html.AnchorElement(href: downloadURL);
    anchorElement.download = downloadURL;
    anchorElement.click();
  }

thanks

@incrediblezayed
Copy link

Hello, I've created a plugin for this long time ago, file_saver

@subrahmanyashedge
Copy link

Future saveLocalFile(BuildContext context, String localFilePath) async {
try {
showDialog(
context: context,
barrierDismissible: false,
builder: (BuildContext context) {
return Center(
child: CircularProgressIndicator(),
);
},
);

  String filePath = localFilePath; 

  File file = File(filePath);
  if (await file.exists()) {
    Directory? appDocDir = await getExternalStorageDirectory();
    if (appDocDir != null) {
      String destPath = "${appDocDir.path}/${file.path.split('/').last}";

      await file.copy(destPath);

      String mimeType = _getMimeType(destPath);

      if (Platform.isAndroid) {
        final androidFile = File(destPath);
        await androidFile.writeAsBytes(await file.readAsBytes(),
            flush: true);
        await androidFile.uri;
      }

      Navigator.pop(context); 
      showMessage('File saved successfully', Colors.green);
    } else {
      throw 'Failed to get directory for saving file';
    }
  } else {
    throw 'File not found at path: $filePath';
  }
} catch (e) {
  Navigator.pop(context);
  showMessage('Failed to save file: $e', Colors.red);
}

}

file downloading but not opening , please give me a solution

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment