【问题标题】:using javascript, angular.js, and sql.js, how do I get a file object from a url?使用 javascript、angular.js 和 sql.js,如何从 url 获取文件对象?
【发布时间】:2014-09-29 19:05:51
【问题描述】:

我正在使用查询字符串从浏览器 url 获取我服务器上的 sqlite db 文件的 URL。

所以在应用程序中我有文件 url。

然后我在那个 url 上调用一个有角度的 $http.get 函数。

这给了我文件中的数据,但我用来读取数据的库需要一个文件对象。

有没有办法从 $http.get 中的参数创建文件对象?参数是data,status,headers,config,我还有文件名。

我尝试构建 blob,但一直收到错误消息,提示“数据库磁盘映像格式错误”。这是 $http.get 函数内部的 blob 构造:

            ...
            var blob = [];
            var blob2 = {fileName:null};
            $http.get(fileName).
              success(function (data, status, headers, config) {
                blob[0] = data;

                var theBlob = new Blob(blob, {name:fileName},{status:status},{headers:headers},{config:config}, {type : ''});
                var r = new FileReader();
                r.onload = function () {                    
                    var Uints = new Uint8Array(r.result);
                    db = new SQL.Database(Uints); 
                ...

我还尝试通过将 $http.get 数据、状态、标头和配置部分添加为 blob[] 数组的更多部分来构建 blob,并将其传递给新的 Blob 构造函数...

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 我基本上是在尝试模仿 html 输入 type=file 功能,但文件名来自 URL 查询字符串,而不是输入标签。这是一个 stackoverflow 问题,开发人员放弃并说这是不可能的,但社区没有任何确认:stackoverflow.com/questions/15037729/…

标签: javascript angularjs sqlite


【解决方案1】:

我最终使用了一个按钮并将来自 url 事件的负载分配给它,这样我就不必构建自己的 blob。当我构建自己的 blob 时,sql.js 无法解析我的 sqlite db 文件。似乎标题丢失了,但我无法以 sql.js 可以正确读取的方式添加它们。

使用修改后的用例,从 url 按钮选项加载可以正常工作。我什至隐藏了按钮,除非从 url 中的查询字符串返回数据。这意味着从 url 加载的按钮仅在 url 中包含查询字符串时显示。

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 1970-01-01
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多