当前位置: 首页 > 面试题库 >

从输入表单获取Base64编码的文件数据

赵景曜
2023-03-14
问题内容

我有一个基本的HTML表单,可以从中获取在Firebug中检查的一些信息。

我唯一的问题是,在将文件数据发送到服务器之前,我试图对文件数据进行 base64 编码,然后将其以该格式保存到数据库。

<input type="file" id="fileupload" />

在Javascript + jQuery中:

var file = $('#fileupload').attr("files")[0];

我有一些基于可用javascript的操作: .getAsBinary()、. getAsText()、. getAsTextURL

但是,这些都不返回可插入的可用文本,因为它们包含 不可用的“字符”
-我不想在上传的文件中出现“回发”,并且我需要针对特定​​对象的多种形式,因此我很重要获取文件并以这种方式使用Javascript。

如何以一种可以使用广泛可用的Javascript base64编码器之一的方式获取文件?

这是我的位置:

<input type="file" id="fileuploadform" />

<script type="text/javascript>
var uploadformid = 'fileuploadform';
var uploadform = document.getElementById(uploadformid);


/* method to fetch and encode specific file here based on different browsers */

</script>

跨浏览器支持的几个问题:

var file = $j(fileUpload.toString()).attr('files')[0];
fileBody = file.getAsDataURL(); // only works in Firefox

另外,IE不支持:

var file = $j(fileUpload.toString()).attr('files')[0];

所以我必须替换为:

var element = 'id';
var element = document.getElementById(id);

对于IE支持。

此功能可在Firefox,Chrome,Safari中使用(但不能正确编码文件,或者至少在文件发布后无法正确显示)

var file = $j(fileUpload.toString()).attr('files')[0];
var encoded = Btoa(file);

也,

file.readAsArrayBuffer()

似乎仅在HTML5中受支持?

但这只会在base64编码之前在UTF_8方法上返回en错误?(或空字符串)

var encoded = Base64.encode(file);

问题答案:

在浏览器端的javascript中完全有可能。

简单的方法:

该readAsDataURL()方法可能已经对其进行编码为base64为您服务。您可能需要删除开始的内容(直到第一个,),但这没什么大不了的。这将带走所有的乐趣。

困难的方法:

如果您想尝试一下困难的方法(或者不起作用),请参阅readAsArrayBuffer()。这将为您提供一个Uint8Array,您可以使用指定的方法。仅在您想弄乱数据本身(例如在上载之前处理图像数据或进行其他伏都教具魔术)时,这才可能有用。

有两种方法:

  • 转换为字符串并使用内置的btoa或类似的
    • 我还没有测试所有情况,但是对我有用-只需获取字符代码
  • 直接从Uint8Array转换为base64

我现在应该做什么:

从Uint8Array转换为字符串的代码非常简单(其中buf是Uint8Array):

function uint8ToString(buf) {
    var i, length, out = '';
    for (i = 0, length = buf.length; i < length; i += 1) {
        out += String.fromCharCode(buf[i]);
    }
    return out;
}

从那里开始:

var base64 = btoa(uint8ToString(yourUint8Array));

Base64现在将是一个以base64编码的字符串,它应该仅上载桃子。如果要在推送之前仔细检查,请尝试以下操作:

window.open("data:application/octet-stream;base64," + base64);

这会将其下载为文件。



 类似资料:
  • 我有一个私钥文件(PEM BASE64编码)。我想用它来解密一些其他数据。使用Java我试着读取文件并解码其中的BASE64编码数据。这是我尝试的代码片段.... 我得到以下错误 类似的问题已经贴在这里,但那些对我没有用。几乎所有的人都建议使用Bouncycastle provider,而Bouncycastle provider并不愿意使用FIPS兼容的provider,并且不确定BC prov

  • 问题内容: 我有一个私钥文件(PEM BASE64编码)。我想在其他地方使用它解密其他数据。使用Java,我尝试读取文件并解码其中的BASE64编码数据。这是我尝试的代码段。 import java.io.; import java.nio.ByteBuffer; import java.security. ; import java.security.spec.PKCS8EncodedKeySp

  • 问题内容: 我有一个包含要使用tar存档的文件列表的文件。叫它吧 它包含了: 有没有一种方法可以发出作为输入的TAR命令?就像是 这样就好像我发出以下命令一样: 问题答案: 是:

  • 我将Xamarin.forms用于Android应用程序,并试图从CDCard获得文件列表。以下代码: 返回本地路径,而不是cd卡的路径/存储/仿真/0

  • 问题内容: 如果我有此代码,该如何保留原始文件的文件名或将其重新分配给新文件名?: 问题答案: 可以创建输入流以从文件或任何其他数据源读取。因此,将文件名附加到输入流没有任何意义。查看该类是否公开了该数据(您甚至可以使用反射来查看该类的内部)。请注意,创建者或犯了一个设计错误,没有公开此信息,或者您正在尝试制作此信息。