gpt4 book ai didi

javascript - 如果我们有文件的 URL 驻留在客户端系统中,则使用 javascript 将任何类型的文件转换为 Base64

转载 作者:行者123 更新时间:2023-11-29 18:12:14 25 4
gpt4 key购买 nike

如果我有文件的 url(在浏览器的沙盒 LocalFileSystem 中)客户端系统中已经存在,我如何将文件(png/jpg/word/excel 等)转换为 base64 格式使用 JavaScript。

我曾尝试使用创建 Canvas (图像)。
我也试过文件控制。
我不想使用任何控件,因为我们在 sqllite 数据库中有文件的 url。

我试过了

function UploadAttachmentfile() {
try {
if(objAttachment.length >0)
{
var ctn = objAttachment.length;
for (var j = 0; j < ctn; j++) {
var row = objAttachment[j].IMGS; \\image
var fname = row.split('\\').pop().split('/').pop();
alert(fname);
window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, function (fs) {
alert('request file system');
fs.root.getDirectory("Foldername", null, function (entry) {
alert('ENTRY : '+entry);
entry.getFile(fname, null, function (fileEntry) {
fileEntry.file(gotFile, fail);
}, fail);
}, fail);
}, fail);
function gotFile(file) {
readDataUrl(file);
}

function readDataUrl(file) {
var reader = new FileReader();
reader.onloadend = function (evt) {
alert("Read as data URL");
alert("target result :"+evt.target.result);
};
reader.readAsDataURL(file);
}

function fail(evt) {
alert('fail');
alert(evt.target.error.code);
}


}

}

}
catch (err) {
}
}

但它总是只提醒失败。

最佳答案

  • 如果您想在用户计算机上获取文件而无需用户选择它(每次 session 再次),那么,您不能这样做(感谢 )。我强烈推荐阅读 this answer linked here以获得完整和最新的解释。

  • 但是,如果您的用户在其 session 期间通过启用文件输入的元素选择文件,那么这很简单:
    假设您在用户选择文件后使用 createObjectURL() 获得了 url,那么您只需使用文件阅读器的 readAsDataURL( fileObject || local URL ) 方法:

    fileReader.readAsDataURL( fileObject );

    这会将其编码为 base64。

编辑:
事实证明您正在使用 Cordova 开发手机(我已将该标签添加到您的问题中)。然而,它仍然基于文件 API 并具有相同的 .readAsDataURL() 方法:see documentation here .它包含针对不同移动平台的简单示例和注释!
此外,您似乎正试图从 File System APILocalFileSystem 接口(interface)获取文件(这使您可以访问浏览器的沙盒文件系统)。所以我链接到的另一个答案不适用(很多)。

以下示例(根据上面链接的文档修改)应该可以帮助您入门:

<!DOCTYPE html>
<html>
<head>
<title>FileReader Example</title>

<script type="text/javascript" charset="utf-8" src="cordova-2.5.0.js"></script>
<script type="text/javascript" charset="utf-8">

// Wait for Cordova to load
//
function onLoad() {
document.addEventListener("deviceready", onDeviceReady, false);
}

// Cordova is ready
//
function onDeviceReady() {
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function gotFS(fileSystem) {
fileSystem.root.getFile("readme.txt", null, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
fileEntry.file(gotFile, fail);
}

function gotFile(file){
readDataUrl(file);
}

function readDataUrl(file) {
var reader = new FileReader();
reader.onloadend = function(evt) {
console.log("Read as data URL");
console.log(evt.target.result);
};
reader.readAsDataURL(file);
}

function fail(evt) {
console.log(evt.target.error.code);
}

</script>
</head>
<body>
<h1>Example</h1>
<p>Read File</p>
</body>
</html>

从这里开始,您更改了 console.log(evt.target.result); 部分:不是将 base64 输出写入控制台,而是将该字符串发送回服务器(再次使用 AJAX 等)

完成:)

关于javascript - 如果我们有文件的 URL 驻留在客户端系统中,则使用 javascript 将任何类型的文件转换为 Base64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26322685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com