Çarpıntı WEB indirme seçeneği


12

Kullanıcı verilerinden bir dosya oluşturmalı çarpıntı web uygulaması yapıyorum. Ve çıktı dosyasını indirme seçeneğiniz var.

Ama çarpıntı web için çalışan herhangi bir seçenek / paket bulamıyorum :(

Birisi bana yardım edebilir mi?


CSV, Pdf vb. İndirmek için ne tür veriler istiyorsunuz?
Deniz Bayar

Sahip olduğum başka bir sorun Flutter ve Web uygulaması için tek bir kod tabanı kullanmaktır. Flutter'da derlemeye çalışmak, dart:htmlaşağıdaki cevapların sahip olduğu eklentileri sevmez .
Mart'ta Suragch

bu davanıza @Suragch yararlı?
Tiago Martins Peres

1
@TiagoMartinsPeres, Firebase kullanmama rağmen, yanıtlayıcının bağlantısındaki kaynak kodu ilginçti. Teşekkür ederim. Daha basit bir çözüm umuyordum, ancak Flutter Web hala beta aşamasında. Gelecekte daha kolay çapraz platform çözümleri sağlanacaktır.
Mart'ta Suragch

Yanıtlar:


3

İyi bir geçici çözüm, barındırılan dosyayı kullanarak yeni bir sekmede açmaktır.

import 'dart:html' as html;

openInANewTab(url){
  html.window.open(url, 'PlaceholderName');
}

Kullanım durumuma iyi uyuyor.


Bu bir APK dosyasını indirmek için çalışır. Bir ses dosyasını indirmek için çalışmaz, çünkü ses dosyası otomatik olarak çalmaya başlar.
Mart'ta Suragch

Evet, ayrıca bir .json dosyası indirmeye çalışıyorum ve bu da krom sekmesi tarafından açıldı. Html5 içinde "download" etiketini kullanmanın bir yolu olup olmadığını görmeye çalışıyorum.
Eradicatore

2

URL'yi indirmek için yeniden yönlendirme için Basit Kod

import 'dart:html' as html;
void downloadFile(String url){
   html.AnchorElement anchorElement =  new html.AnchorElement(href: url);
   anchorElement.download = url;
   anchorElement.click();
}

1
Bu cevap ödül döneminde geç geldiğinden, ödül süresinin dolmasından önce denemek için zamanım yok. Ancak, işe yaradığını varsayacağım (ancak bir ses dosyasını sadece otomatik olarak oynatmadan indireceğini onaylayabilir misiniz?). Bu cevabı seçiyorum çünkü anlaşılması kolay.
Mart'ta Suragch 2

Bu özellikle flutter web içindir. Mobil uygulama için alternatif var mı?
Razi Kallayi

Android'de url'den dosya indirebilir ve IO kütüphanesini kullanarak telefon belleğinize kaydedebilirsiniz.
vishwajit76

1

İndirmeyi tetiklemenin bir yolu, "yerel" javascript'te kullanılan ortak bir kalıbı uyarlamak, downloadözniteliği olan bir bağlantı öğesi oluşturmak ve bir tıklamayı tetiklemektir.

import 'dart:convert';
import 'dart:html';

main() {
  File file = // generated somewhere
  final rawData = file.readAsBytesSync();
  final content = base64Encode(rawData);
  final anchor = AnchorElement(
      href: "data:application/octet-stream;charset=utf-16le;base64,$content")
    ..setAttribute("download", "file.txt")
    ..click();
}

Güzel. Doğal javascriptte kullanılan kalıplar hakkında hiçbir şey bilmiyorum, bu yüzden daha fazla bakacağım.
Mart'ta Suragch


Vay be bu beni BÜYÜK ZAMAN kurtardı! Çok teşekkür ederim. Bu kod, Flutter'da oluşturduğum bir pdf dosyasını anında indirebilir.
nipunasudha

0

Ödüllere verilen yanıt:

Bir ses dosyası durumunda, indirmek yerine çalmaya başlar

Video ile aynı şeyi yaptım, ancak ses ile de çalışacağından eminim. Ürettiğiniz sesin bir dizi veya damla olduğunu varsayalım

    import 'dart:js' as JS;
    import 'dart:html' as HTML;

    const mimeType = 'audio/wav'; // TODO: Pick a right format

    void downloadFile(List chunks) async {
        final blob = HTML.Blob(chunks, mimeType);
        final objectUrl = await HTML.Url.createObjectUrlFromBlob(blob);
        final a = HTML.AnchorElement();
        a.href = item.url;
        a.download = "my_audio_file_${DateTime.now()}.wav";
        HTML.document.body.append(a);
        a.click();
        // Wait for click event to be processed and cleanup
        await Future.delayed(Duration(milliseconds: 100));
        a.remove();
        HTML.Url.revokeObjectUrl(item.videoObjectUrl);
    }

Ses dosyası url ise ne olur http://www.example.com/my_audio.mp3?
Mart'ta Suragch

0

url_launcher paketini url_launcher_web ile kullanabilirsiniz

o zaman şunları yapabilirsiniz:

launch("data:application/octet-stream;base64,${base64Encode(yourFileBytes)}")

EDIT: bunu yaparsanız bir eklentiye ihtiyacınız yok

download.dart:

import 'dart:convert';
// ignore: avoid_web_libraries_in_flutter
import 'dart:html';

void download(
  List<int> bytes, {
  String downloadName,
}) {
  // Encode our file in base64
  final _base64 = base64Encode(bytes);
  // Create the link with the file
  final anchor =
      AnchorElement(href: 'data:application/octet-stream;base64,$_base64')
        ..target = 'blank';
  // add the name
  if (downloadName != null) {
    anchor.download = downloadName;
  }
  // trigger download
  document.body.append(anchor);
  anchor.click();
  anchor.remove();
  return;
}

empty_download.dart:

void download(
  List<int> bytes, {
  String downloadName,
}) {
  print('I do nothing');
}

ithalat ve kullanım:

import 'empty_download.dart'
if (dart.library.html) 'download.dart';

void main () {
  download('I am a test file'.codeUnits, // takes bytes
      downloadName: 'test.txt');
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.