【问题标题】:Mime type on FileSystem Api of Google ChromeGoogle Chrome 的 FileSystem Api 上的 Mime 类型
【发布时间】:2012-03-29 03:57:05
【问题描述】:

我正在为 Google Chrome 开发一个扩展程序,它可以生成一个 mp3 文件并使用 FileSystem API 将其保存到本地存储。当我保存时,我指定了 mime 类型“application/octec-stream”。后来我向用户发送文件 url,而不是下载文件,浏览器开始在 html5 播放器上播放它。查看响应,很明显返回的 mime 类型是基于文件扩展名的“audio/mp3”。 问题是:如何有效地让浏览器下载文件而不是播放文件?这是我在 javascript 上所做的小 sn-p。

 fs.root.getFile(contextData.songInfo.Name + ".mp3", { create: true }, function (fileEntry) {

         // Create a FileWriter object for our FileEntry (log.txt).
         fileEntry.createWriter(function (fileWriter) {

             fileWriter.onwriteend = function (e) {
                 console.log('Write completed.');
             };

             fileWriter.onerror = function (e) {
                 console.log('Write failed: ' + e.toString());
             };

             var bb = new window.WebKitBlobBuilder();
             bb.append(buffer);
             fileWriter.write(bb.getBlob('application/octet-stream'));

             contextData.fileUrl = fileEntry.toURL();

             callback(contextData);

         }, errorHandler);



     }, errorHandler);

【问题讨论】:

  • MIME 类型只存在于 HTTP 协议中,对于文件系统,它们总是从文件扩展名中推导出来的。似乎 Chrome 对使用 FileSystem API 创建的文件的处理方式相同。
  • 问题是,当我将用户重定向到文件的 URL 时,我又回到了 HTTP 世界,让我决定与 http 响应一起发送哪种 mime 类型是合理的。我不希望用户在浏览器中听到文件,他们需要保存它。现在我添加了一个 .download 扩展名并且 ir 触发下载,但是该文件必须由用户稍后重命名,这很痛苦。也许将文件封装在一个 .zip 中,但用户在使用它之前再次采取行动并解压缩。

标签: html google-chrome filesystems


【解决方案1】:

使用a[download] 属性,并将href 设置为filesystem: URL

<a href="filesystem:..." download="FileName">Download it!</a>

这将强制浏览器下载资源而不是导航到它:) 这里有更多解释:http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 2012-12-07
    • 2013-05-25
    • 2012-03-23
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多