AngularJS 上传文件并将其发送到数据库

2024-02-09

我一直在努力得到ng文件上传 https://github.com/danialfarid/ng-file-upload工作,以便我可以上传图像并将它们发送到数据库——在我的例子中是mongoLab http://mongolab.com接受 JSON 对象的数据库可以是POSTed 的语法如下:

$http.post('myMongoName/myDb/myCollection/myTable', {'key': 'value'})

相当简单。但是,我对如何发送使用上传的图像感到困惑ngFileUpload到数据库。我使用 ngFileUpload 文档页面上介绍的熟悉语法:

$scope.upload = function (files) {
        if (files && files.length) {
            for (var i = 0; i < files.length; i++) {
                var file = files[i];
                console.log(file);
             Upload.upload({
                url: myMongoLabURL,
                fields: {'sup': 'sup'},
                file: file
                })
             }).success(function (data, status, headers, config) {
                    console.log('file ' + config.file.name + 'uploaded. Response: ' + data);
                });
            }
        }
 }

但是,在登录后file对象出来,我得到对象:

File {}
$$hashKey: "object:76"
lastModified: 1433922719000
lastModifiedDate: Wed Jun 10 2015 00:51:59 GMT-0700 (PDT)
name: "1.png"
size: 138024
type: "image/png"
webkitRelativePath: ""
__proto__: File 

其中都不包含可以存储到数据库的实际图像二进制文件。我基本上不知道实际图像本身实际上上传到哪里!

同样重要的是要注意,我没有使用此语法从服务器获得响应 - 不过,如果我可以获得图像的二进制文件,我可以使用熟悉的$http.post方法并自己将图像推送到数据库中。

如何找到上传图像的二进制文件,并将其推送到数据库中?上传后图像存在于哪里,甚至上传到哪里?我正在做这一切localhost所以看起来浏览器已经读取了图像的所有属性,但我不确定如何将其转化为有意义的见解,我可以用它来将图像存储到我的外部数据库中。

谢谢你的帮助。


我最终使用了文件读取器API https://developer.mozilla.org/en-US/docs/Web/API/FileReader。最具体地说,将 URI 读取为blob。我在自定义指令中实现了如下所示的内容。我最终包括了很多attrs阅读这将允许该指令在同一页面上的隔离范围内多次使用 - 但我将把它留在这里。如果有帮助的话,我可以为您提供整个指令,但简单来说,它看起来像这样:

function create_blob(file) {
    var deferred = $q.defer();
    var reader = new FileReader();
    reader.onload = function() {
            deferred.resolve(reader.result);
    };
    reader.readAsDataURL(file);
    return deferred.promise;
}
$scope.$watch('files', function() {
    $scope.upload($scope.files);
});
$scope.upload = function(files) {
    $scope.loading = true;
    if (files && files.length) {
        for (var i = 0; i < files.length; i++) {
            var file = files[i];
            var promise = create_blob(file);
            promise.then(function(result) {
                var thumb = resize(result);
                Upload.http({
                    url: '/path',
                    data: result
                })
                .progress(function (evt) {
                    console.log(evt);
                    var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
                    console.log('progress: ' + progressPercentage + '% ');
               })
                .success(function (data, status,headers,config) {

...etc.

我想这会为你做的。得到blob数据可能会令人困惑,因为当您上传图像时,您在范围内看不到任何数据 - 尽管图像的其余元数据会显示!这create_blob函数应该以 blob 格式为您获取它。尝试做一个console.log(reader.readAsDataURL(file);在该函数内直接查看数据。

我花了很长时间才弄清楚,我不确定这是否是最好的方法——如果有人知道更好的方法,请随时提出建议! :-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS 上传文件并将其发送到数据库 的相关文章

随机推荐

  • 使用 C# 反射从字典生成动态对象

    我一直在研究 C 中的反射 想知道我是否使用带有键值的字典可以创建一个带有变量的对象 该变量包含字典中每个键的名称及其值 该字典的键值 我有一个相反的方法 它从字典中提取一个对象 该字典包含键和类属性及其值 即属性的值 我想知道如果可能的话
  • Julia 中加载/导入的包列表

    如何获取 Julia 会话导入 使用的包的列表 Pkg status 列出所有已安装的软件包 我对通过以下方式导入 加载的内容感兴趣using or import 看起来whos 包含相关信息 名称以及是否是模块 可以输出whos 被捕获在
  • jQuery every 循环重命名 ID 的每个实例

    我有一个页面正在表中创建动态创建的行 其输入的 ID 为 fixedRate 我正在尝试重命名fixedRate id 的每个实例 这仅适用于我当前代码的 id 的第一个实例 这是代码 var amountRows billTasks gt
  • 析构函数永远不会被调用[重复]

    这个问题在这里已经有答案了 我有课Class这创造了一个Thread在它的构造函数中 该线程运行一个while true 循环正在读取非关键数据NetStream 该线程将被析构函数中止 Class thread Abort thread
  • 进程是否在远程计算机上运行?

    我有三台远程连接的远程电脑 我正在尝试编写一个简单的 Windows 应用程序 该应用程序将在单个窗口中显示特定进程是否在任意一台机器上运行 例如 Server1 Chrome 未运行 Server2 Chrome 正在运行 Server3
  • 为 Android 创建 PDU

    我目前正在编写和应用程序 即发送 接收短信 出于单元测试的目的 我需要以编程方式创建 PDU 解码非常简单 Bundle bundle intent getExtras if bundle null Get all messages con
  • 有人尝试过用Z3本身来证明Z3吗?

    有没有人尝试证明Z3 http research microsoft com en us um redmond projects z3 与Z3本身 是否有可能使用 Z3 来证明 Z3 是正确的 更理论化的是 是否有可能使用 X 本身来证明工
  • 模型不会在 ng-if 内更新

    我在角度应用程序中遇到了奇怪的行为 我不知道这是一个错误还是已知的限制 use strict var ctrl function scope scope foo false div foo foo div style background
  • 使用另一个表中的数据创建 SQL 表

    如何使用另一个表 表的副本 中已存在的数据创建表 复制表的最便携方法是 使用 CREATE TABLE 语句创建新表 基于旧表中的 SELECT 使用 INSERT INSERT INTO new table SELECT FROM old
  • 以类似于 Windows 的 MessageBox() 的方式使用 UIAlertView?

    我是 iPhone 新手 我希望能够以类似于 Windows 的方式使用 UIAlertViewMessageBox or the MessageDlg in Delphi 例如 我有一个方法需要询问用户对某件事的确认 并根据他们的响应继续
  • 仅返回与 Solr 匹配足够 NGram 的结果

    为了使用 Solr 实现某种程度的容错 我开始使用NGramFilterFactory 以下是来自schema xml
  • RegAsm.exe 和 regsvr32 有什么区别?如何使用regsvr32生成tlb文件?

    谁能告诉我 regsvr32 和 RegAsm 之间有什么区别 我的 Dll 是 C 语言 那么如何将类导入到 C 中 regsvr32将加载库并尝试调用DllRegisterServer 从那个图书馆 它不在乎什么DllRegisterS
  • PostgreSQL 与 SQL Server NVARCHAR 等效的是什么?

    如果 Microsoft SQL Server 数据库中有 NVARCHAR 或 NTEXT 数据类型的字段 那么 PostgreSQL 数据库中的等效数据类型是什么 我很确定 postgres varchar 与 Oracle Sybas
  • 基本字符串输入

    我刚刚遇到了这段代码 它允许用户在命令提示符中输入字符串 我知道他们所做的一切 这一切都很棒 但我有一个关于 cin 和 getline 函数的问题 string name cout lt lt Please enter your full
  • 如何创建这样的渐变进度指示器?

    我注意到基本的CircularProgressIndicator小部件有很少的参数来定制它 我想要达到像 gif 上那样的结果 不幸的是 我的知识不足以从头开始创建这样一个指标 在 pub dev 上搜索没有带来任何结果 Make a Cu
  • PHP 返回错误 500,但没有记录任何内容

    当我有一个 php 应用程序返回内部服务器错误 500 但错误日志中没有显示任何内容时 我遇到了问题 现在我知道我正在尝试运行的内容有错误 我知道我丢失了一些文件以及什么没有 但是 apache 错误日志中应该显示一些内容 否则我应该如何确
  • 使用 opencv 3.0 的 cv2 中的 KNN train()

    我正在尝试使用 cv2 python 2 7 和 opencv 3 0 运行 k 最近邻 我使用类似的代码复制了相同的错误消息http docs opencv org 3 0 beta doc py tutorials py ml py k
  • 使用 AWS SimpleDB 从 Java Servlet 创建域

    我是一名大学生 正在从事一个研究项目 该项目涉及将 Web 应用程序迁移到亚马逊云 上学期我一直在研究 servlet 并且能够使用 Tomcat 中运行的 java servlet 来实现应用程序的大部分功能 我现在正在尝试集成 Amaz
  • 将 TYPO3 extbase storagePageIds / storagePid 设置为当前

    我正在使用 TYPO3 扩展 feupload 它依赖于 extbase 这是我第一次接触extbase 但问题是关于 extbase 的 我希望 TYPO3 在查询中默认包含通常的 IN 当前页面 pid 检查 除非另有说明 但在 ext
  • AngularJS 上传文件并将其发送到数据库

    我一直在努力得到ng文件上传 https github com danialfarid ng file upload工作 以便我可以上传图像并将它们发送到数据库 在我的例子中是mongoLab http mongolab com接受 JSO