Base64圖片上傳與訪問

首先占卧,base64字符串涣觉,瀏覽器是可以直接解析的,格式是:

<img src="data:image/jpeg;base64,xxxxxx" width="320px" height="220px" alt="">
1列肢、ajax封裝
var contextPath = "http://localhost:80/";

$.extend({
    send: function (url, jsonObject, method, callback) {
        var data = method.toUpperCase()=="GET"?jsonObject:JSON.stringify(jsonObject);//GET方法不帶參數恰画,是自動轉化為URL,所以不能轉為JSON字符串
        request(url,data, method, callback, "application/json;charset=UTF-8",true);
    },
    upload: function (url, file ,callback) {
        request(url, file,"post", callback, false,false);
    }
});

function request(url,data,method,callback,contentType,processData) {
    $.ajax({
        type: method,
        url: contextPath+url,
        data: data,
        dataType: "json",
        processData: processData, //用于對data參數進行序列化處理
        contentType: contentType,
        async: true,
        success: function(data){
            console.log(data);
            if(data.code == 200){
                callback(data.data);
            }else {
                alert(data.message);
            }
        },
        error: function (err) {
            alert("系統(tǒng)錯誤");
        }
    });
}

HTML:

<script src="https://code.jquery.com/jquery-1.8.3.js"></script>

<input id="file" type="file" value="選擇圖片">
<img id="img" src="" width="320px" height="220px" alt="">
<textarea id="url_text" rows="15" cols="47" alt="">url_text</textarea>
1瓷马、圖片直接上傳

JS:

var form = new FormData();
form.append("file", $("#file").prop('files')[0]);
$.upload("fastdfs/upload-mu",form,function (url) {
    $("#img").attr("src",url);
    $("#url_text").text("因為是直接上傳的圖片拴还,可以直接訪問的路徑:\n"+url);
});

JAVA:

@PostMapping("fastdfs/upload-mu")
public ResultVo<String> upload(@RequestParam("file") MultipartFile file) throws Exception {
    String visitUrl = fdfsClient.uploadFile(file);
    return new ResultVo(visitUrl);
    //返回一個http://localhost/group1/M00/xxxx/xxx.jpg
}

將圖片直接上傳到服務器,返回的URL可以直接訪問到圖片

2欧聘、圖片轉base64字符串上傳

JS

var file = $("#file")[0].files[0];
var exName = file.name.substr(file.name.lastIndexOf('.')+1);
getBase64ByImg(file,function (dataURL) {
    $("#url_text").text(dataURL);
    $("#img").attr("src",dataURL);
    var data = {
        "base64Text":dataURL,
        "exName":exName
    }
    $.send("fastdfs/upload-base64",data,"post",function (result) {
        $("#url_text").text("因為是上傳的base64字符串片林,不可以直接訪問,需要解碼:\n"+result);
    });
});
        
        
function getBase64ByImg(img, callback) {
    var reader = new FileReader();
    var AllowImgFileSize = 2100000; //上傳圖片最大值(單位字節(jié))( 2 M = 2097152 B )超過2M上傳失敗
    if (img) {
        //將文件以Data URL形式讀入頁面
        reader.readAsDataURL(img);
        reader.onload = function (e) {
            if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {
                alert( '上傳失敗怀骤,請上傳不大于2M的圖片费封!');
                return;
            }else{
                //執(zhí)行上傳操作
                console.log("圖片轉base64完成:");
                console.log(reader.result);
                callback(reader.result);
            }
        }
    }
}

JAVA:

@PostMapping("fastdfs/upload-base64")
public ResultVo<String> uploadBase64(@RequestBody FastdfsFile image) {
    String visitUrl = fdfsClient.uploadFile(image.getBase64Text(),image.getExName());
    return new ResultVo(visitUrl);
    //返回一個http://localhost/group1/M00/xxxx/xxx.jpg,但不能直接訪問
}

@Data
public class FastdfsFile {
    /**  base64 字符串 */
    private String base64Text;
    /**  文件拓展名 */
    private String exName;
    /**  fastdfs訪問路徑 */
    private String visitUrl;
    /**  文件id 用于訪問fastdfs */
    private String fileId;
}

因為是上傳的base64字符串,不可以直接訪問

3蒋伦、Base64字符串上傳后訪問

圖片通過 MultipartFile 上傳后可以直接訪問弓摘,但轉base64字符串后卻不能直接訪問,這里介紹2鐘方法痕届。

3.1 通過web服務器下載訪問

JS:

var data = {
    "visitUrl":url //剛剛上傳base64字符串返回的不能直接訪問的URL
};
$.send("fastdfs/download-base64",data,"post",function (data) {
    $("#url_text").text(data);
    $("#img").attr("src",data);
});

Java:

@PostMapping("fastdfs/download-base64")
public ResultVo<String> downloadase64(@RequestBody FastdfsFile image, HttpServletResponse response) throws Exception{
    byte[] data = fdfsClient.download(image.getVisitUrl()
        .substring(image.getVisitUrl().indexOf("group")));
    return new ResultVo(new String(data);
    //返回了可直接顯示的base64字符串
}
3.2 JS直接訪問文件服務器解碼

JS:

//url為不能直接訪問的鏈接
getBase64ByURL(url,function (base64) {
    $("#url_text").text(base64);
    $("#img").attr("src",base64);
});

function getBase64ByURL(url, callback) {
    var request = new XMLHttpRequest();
    request.open('GET', url, true);
    request.crossOrigin = 'anonymous'
    request.responseType = 'blob';
    request.onload = function () {
        var reader = new FileReader();
        reader.readAsText(request.response);
        reader.onload = function (e) {
            var base64img = e.target.result;
            console.log(base64img);
            callback(base64img);
        };
    };
    request.send();
};

注意韧献,這種方法需要文件服務器支持跨域。

Java與文件服務器(FastDFS)之間訪問都用的 fileId研叫,即group1/M00/00/00/xxx.jpg 這一串

自己去掉 http://host:port/contextPath/

Over

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末锤窑,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子嚷炉,更是在濱河造成了極大的恐慌渊啰,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渤昌,死亡現場離奇詭異虽抄,居然都是意外死亡,警方通過查閱死者的電腦和手機独柑,發(fā)現死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門迈窟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人忌栅,你說我怎么就攤上這事车酣∏冢” “怎么了?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵湖员,是天一觀的道長贫悄。 經常有香客問我,道長娘摔,這世上最難降的妖魔是什么窄坦? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮凳寺,結果婚禮上鸭津,老公的妹妹穿的比我還像新娘。我一直安慰自己肠缨,他們只是感情好逆趋,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晒奕,像睡著了一般闻书。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脑慧,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天魄眉,我揣著相機與錄音,去河邊找鬼漾橙。 笑死杆融,一個胖子當著我的面吹牛,可吹牛的內容都是我干的霜运。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蒋腮,長吁一口氣:“原來是場噩夢啊……” “哼淘捡!你這毒婦竟也來了?” 一聲冷哼從身側響起池摧,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤焦除,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后作彤,有當地人在樹林里發(fā)現了一具尸體膘魄,經...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年竭讳,在試婚紗的時候發(fā)現自己被綠了创葡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡绢慢,死狀恐怖灿渴,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤骚露,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布蹬挤,位于F島的核電站,受9級特大地震影響棘幸,放射性物質發(fā)生泄漏焰扳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一误续、第九天 我趴在偏房一處隱蔽的房頂上張望吨悍。 院中可真熱鬧,春花似錦女嘲、人聲如沸畜份。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽爆雹。三九已至,卻和暖如春愕鼓,著一層夾襖步出監(jiān)牢的瞬間钙态,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工菇晃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留册倒,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓磺送,卻偏偏與公主長得像驻子,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子估灿,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350