代码之家  ›  专栏  ›  技术社区  ›  MitchEff

无论CSP中有什么内容,Cordova都不会获取任何base64

  •  0
  • MitchEff  · 技术社区  · 6 年前

    我已经放弃尝试从文件系统URL加载它,现在尝试使用base64。

    <meta http-equiv="Content-Security-Policy" content="
        default-src *; 
        style-src * 'unsafe-inline'; 
        script-src * 'unsafe-inline' 'unsafe-eval'; 
        media-src *; 
        img-src * data:; 
        connect-src * ws: wss:;
    " />
    

    “拒绝连接到”数据:image/jpg;base64。。。因为它违反了 文档的内容安全策略。”,来源: http://localhost:8080/js/main.js "

    有人知道为什么会这样,或者我会如何着手解决这个问题吗?

    navigator.camera.getPicture(response => {
        this.urltoFile('data:image/jpg;base64,'+response, 'test.jpg')
            .then(file => {
                console.log(file);
            })
        }, () => {}, {
        destinationType : navigator.camera.DestinationType.DATA_URL,
    })
    

    urlToFile 功能是:

    urltoFile(url, filename){
        let mimeType = (url.match(/^data:([^;]+);/)||'')[1];
    
        return (fetch(url)
            .then(res => {
                return res.arrayBuffer();
            })
            .then(buf => {
                return new File([buf], filename, { 
                    type: mimeType 
                });
            })
        );
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Phonolog    6 年前

    根据您的代码,您正在使用Fetch API将图片作为base64下载。

    看着 docs connect-src 指令(重点是我的):

    HTTP内容安全策略(CSP) 指令限制 可以使用脚本接口加载的URL。这些API

    • <a> ping ,
    • Fetch ,
    • XMLHttpRequest
    • WebSocket ,及
    • EventSource .

    连接src 接受 data Urls data: 按照这样的指令:

    connect-src * data: ws: wss:;