【问题标题】:how to get base_64 string of file upload using jquery with browser compatibility?如何使用浏览器兼容的jquery获取base_64文件上传字符串?
【发布时间】:2014-06-06 03:52:43
【问题描述】:

您好,任何人都可以帮助我,我只需要获取要上传的 csv 文件的 base_64 代码

这是我的带有 csv 过滤器的代码

function readCSV(input) {
    if (input.files && input.files[0]) {

        var filename = input.files[0].name;
        var ext = filename.split('.').pop();

        if(input.files[0].type == "text/csv" || ext == "csv" || ext == "xls"){
            var reader = new FileReader();

            reader.onload = function (e) {
            var base_64 = e.target.result;
            console.log(base_64);

            var array = new Uint8Array(100);
                array[42] = 10;
                $('#file_name').html(input.files[0].name);
                $('#filename').val(input.files[0].name);
                $('#content').val(base_64);

            }
            reader.readAsDataURL(input.files[0]);
        }else{
            $('#file_name').html('<span style="color:red; font-size:11px"><i class="fa fa-ban"></i> Invalid File Please try again!</span>');
        }
    }
}

当我console.log(base_64)时在我的logcat中

谷歌浏览器的结果是

data:base64,UHJvZHVjdCBOYW1lL....(rest of base_64 string)

我只需要 base_64 字符串

所以我想出了这个解决方案

//replace function content.replace('data:;base64,', '');

我只是删除了字符串中的data:base64,

但是当我在Firefox中尝试时,结果是

data:application/octet-stream;base64,UHJvZHVjdCBOYW1lL....(rest of base_64 string)

与第一个结果不同,所以我的替换功能不起作用

但我不想添加另一个替换功能,因为我担心如果浏览器推送更新,data:base64 可能是1.0.data:base64v.1.data:base64,所以每当字符串更改时,我的系统都会失败。

谁能帮帮我。我只需要获取 base_64 字符串,提前致谢。

【问题讨论】:

  • 当您执行console.log(({}).toString.call(base_64)console.log(typeof base_64) 时会发生什么?
  • @JustcallmeDrago 等我试试

标签: javascript php jquery csv


【解决方案1】:

我会使用逗号作为分隔符拆分字符串,然后从新创建的数组中获取最后一个元素,该元素将代表您的 base64 数据:

//split into ['data:application/octet-stream;base64', 'UHJvZHVjdCBOYW1lL']
var arr = content.split(',');
var base64 = arr[arr.length-1];

正如bergi所说,base64数据在最后一个逗号之后是defined to appear

【讨论】:

  • 先生,这确定base_64字符串总是在最后吗?如果是的话,就可以了。谢谢
  • 是的,base64 字符串总是在最后。这是bergi提供的链接:tools.ietf.org/html/rfc2397#section-3
【解决方案2】:

Data URLs 确实有 well-defined syntax,因此不太可能像您所描述的那样进行彻底的改变。

var base_64 = this.result.replace(/^data:.*?;base64,/, "");

会做的。

【讨论】:

  • 哦..所以一个变化是媒体类型?你能解释一下替换里面的正则表达式吗?请。谢谢
  • 简单的begin anchor,后面是data:,后面是multipleanything,后面是base64,。没什么特别的。
  • 实际上,甚至媒体类型都不应该改变。 is specified 依赖于 file's .type - 其可检测性在浏览器之间似乎有所不同。 Chrome 回退到文本(可以从 data-url 中省略),FireFox 默认为octet-stream
猜你喜欢
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-12
相关资源
最近更新 更多