ฉันกำลังสร้างเว็บแอพพลิเคชั่นที่ควรสร้างไฟล์จากข้อมูลผู้ใช้ และมีตัวเลือกในการดาวน์โหลดไฟล์ที่ส่งออก
แต่ฉันไม่สามารถหาตัวเลือก / แพ็คเกจใด ๆ ที่ใช้งานได้กับเว็บกระพือ :(
มีคนช่วยฉันออกได้ไหม
dart:html
ปลั๊กอินที่คำตอบด้านล่างมี
ฉันกำลังสร้างเว็บแอพพลิเคชั่นที่ควรสร้างไฟล์จากข้อมูลผู้ใช้ และมีตัวเลือกในการดาวน์โหลดไฟล์ที่ส่งออก
แต่ฉันไม่สามารถหาตัวเลือก / แพ็คเกจใด ๆ ที่ใช้งานได้กับเว็บกระพือ :(
มีคนช่วยฉันออกได้ไหม
dart:html
ปลั๊กอินที่คำตอบด้านล่างมี
คำตอบ:
วิธีแก้ปัญหาที่ดีคือการเปิดไฟล์ที่โฮสต์ในแท็บใหม่โดยใช้
import 'dart:html' as html;
openInANewTab(url){
html.window.open(url, 'PlaceholderName');
}
เหมาะสำหรับกรณีการใช้งานของฉัน
รหัสง่าย ๆ สำหรับการเปลี่ยนเส้นทางไปยัง URL ดาวน์โหลด
import 'dart:html' as html;
void downloadFile(String url){
html.AnchorElement anchorElement = new html.AnchorElement(href: url);
anchorElement.download = url;
anchorElement.click();
}
วิธีหนึ่งในการทริกเกอร์การดาวน์โหลดคือการปรับรูปแบบทั่วไปที่ใช้ในจาวาสคริปต์ "ดั้งเดิม" สร้างองค์ประกอบจุดยึดด้วยdownload
แอตทริบิวต์และทริกเกอร์คลิก
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();
}
การตอบสนองต่อรางวัล:
กรณีของไฟล์เสียงที่เพิ่งเริ่มเล่นแทนที่จะดาวน์โหลด
ฉันทำสิ่งเดียวกันกับวิดีโอ แต่ฉันแน่ใจว่ามันจะทำงานกับเสียงได้เช่นกัน ฉันถือว่าเสียงที่คุณสร้างขึ้นเป็นอาร์เรย์หรือหยด
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);
}
http://www.example.com/my_audio.mp3
อะไร?
คุณสามารถใช้แพ็คเกจ url_launcher กับurl_launcher_web
จากนั้นคุณสามารถทำได้:
launch("data:application/octet-stream;base64,${base64Encode(yourFileBytes)}")
แก้ไข: คุณไม่จำเป็นต้องมีปลั๊กอินถ้าคุณทำเช่นนี้
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');
}
นำเข้าและใช้:
import 'empty_download.dart'
if (dart.library.html) 'download.dart';
void main () {
download('I am a test file'.codeUnits, // takes bytes
downloadName: 'test.txt');
}