-1

我正在尝试使用 Firebase 来存储事件列表。每个事件都有典型的信息名称、日期、位置和图像。我尝试使用文件 api 将 dataurl 与其余数据一起存储在引用中,但我似乎无法在与所有其他数据相同的键下获取图像。我将如何通过表单添加上传图片以及 Firebase 中名称 id 下的所有其他数据。

这是文件上更改事件的处理程序。

function onFileChanged(theEvt) {
    var theFile = theEvt.target.files[0];

    // check to see if it is text
    if (!theFile.type.match("image.*")) {
        return;
    }

    var reader = new FileReader();

    reader.onload = function (evt) {
        var resultdata = evt.target.result;
        var file = theFile.name.replace(/\.[^\.]+$/, '');

        nameRef = new Firebase('https://firebaseio.com/events/' + file);
        var f = nameRef.child('image');
        f.set(resultdata);
    }

    reader.readAsDataURL(theFile);
}
4

1 回答 1

1

只要文件表示为数据 URL(Base64 编码),该片段就应该可以工作。以下是我们如何在其中一个示例应用程序中执行此操作的示例:https ://github.com/firebase/firepano/blob/gh-pages/firepano.js - 除了此代码段生成随机 ID 之外,代码几乎相同文件而不是从文件名中提取它。

function handleFileSelect(evt) {
  var f = evt.target.files[0];
  var reader = new FileReader();
  reader.onload = (function(theFile) {
    return function(e) {
      var filePayload = e.target.result;
      var hash = CryptoJS.SHA256(Math.random() + CryptoJS.SHA256(filePayload));
      var f = new Firebase(firebaseRef + 'pano/' + hash + '/filePayload');
      spinner.spin(document.getElementById('spin'));
      f.set(filePayload, function() {
        spinner.stop();
        document.getElementById("pano").src = e.target.result;
        $('#file-upload').hide();
        window.location.hash = hash;
      });
    };
  })(f);
  reader.readAsDataURL(f);
}
于 2013-05-04T22:42:38.033 回答