-2

Flutter can not download files from Google Drive or OneDrive, zip or otherwise. The files just get partially downloaded whereas files from most other links from websites etc are downloaded completely.

For example this Google Drive link will only get 10% file download but the other URL for a novel will get 100%

Packages used:

  • http: ^0.12.2
  • dio: ^3.0.10
  • path_provider: ^1.6.24

Google Drive URL = 'https://drive.google.com/file/d/1xnhT8mzMeU-wRemt1sNFR0DJt2MNmSC8/view?usp=sharing'; Gutenberg Novel URL = 'https://www.gutenberg.org/files/1342/1342-h.zip';

Example code shows both links and result.

Output:

  • Expected size: myColorsDIO.zip: 594,545 , myColorsHTTP.zip: 594,545 , 1342DIO.zip: 778512, 1342HTTP.zip: 778512
  • Obtained size: myColorsDIO.zip: 63411, myColorsHTTP.zip: 70677, 1342DIO.zip: 778512, 1342HTTP.zip: 778512

Please help.

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';
import 'dart:io';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(title: 'Flutter Demo', theme: ThemeData(primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,), home: MyHomePage(),);
  }
}

class MyHomePage extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Downloading Files'),),
      body: Center(child: Text('Press the floating button to download files',),),
      floatingActionButton: FloatingActionButton(
        onPressed: () { _downloadFile();},
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

  Future<File> _downloadFile() async {

    String myUrl = 'https://drive.google.com/file/d/1xnhT8mzMeU-wRemt1sNFR0DJt2MNmSC8/view?usp=sharing';
    String my7ZIPUrl = 'https://www.gutenberg.org/files/1342/1342-h.zip';
    String myDownloadDirectory = ((await getApplicationDocumentsDirectory()).path);
    String myDownloadedGoogleFile1 = 'myColorsDIO.zip';
    String myDownloadedGoogleFile2 = 'myColorsHTTP.zip';
    String myDownloadedfromgutenberg1 = '1342DIO.zip';
    String myDownloadedfromgutenberg2 = '1342HTTP.zip';

    print('Download Directory: $myDownloadDirectory');
    //Downloading Google Drive zip file via DIO
    Dio dio = Dio();
    await dio.download(
        myUrl,
        '$myDownloadDirectory/$myDownloadedGoogleFile1',
        onReceiveProgress: (rcv, total) {print('received: ${rcv.toStringAsFixed(0)} out of total: ${total.toStringAsFixed(0)}');}
    );

    await dio.download(
        my7ZIPUrl,
        '$myDownloadDirectory/$myDownloadedfromgutenberg1',
        onReceiveProgress: (rcv, total) {print('received: ${rcv.toStringAsFixed(0)} out of total: ${total.toStringAsFixed(0)}');}
    );

    //Downloading Google Drive zip file via HTTP
    var req = await http.Client().get(Uri.parse(myUrl));
    var file = File('$myDownloadDirectory/$myDownloadedGoogleFile2',);
    file.writeAsBytes(req.bodyBytes);

    //Downloading Google Drive zip file via HTTP
    var req1 = await http.Client().get(Uri.parse(my7ZIPUrl));
    var file1 = File('$myDownloadDirectory/$myDownloadedfromgutenberg2',);
    file1.writeAsBytes(req1.bodyBytes);

    print('Expected size: myColorsDIO.zip: 594,545 , myColorsHTTP.zip: 594,545 , 1342DIO.zip: 778512,  1342HTTP.zip: 778512');
    print('myColorsDIO.zip: ${await File('$myDownloadDirectory/$myDownloadedGoogleFile1',).length()}, myColorsHTTP.zip: ${await File('$myDownloadDirectory/$myDownloadedGoogleFile2',).length()}, 1342DIO.zip: ${await File('$myDownloadDirectory/$myDownloadedfromgutenberg1',).length()},  1342HTTP.zip: ${await File('$myDownloadDirectory/$myDownloadedfromgutenberg2',).length()}');
    return null;
  }

}
mohit sharma
  • 89
  • 2
  • 10

1 Answers1

0

Sharing link does not work directly, put it in the browser and when you are prompted for a download, that is the URL that works.

mohit sharma
  • 89
  • 2
  • 10