【问题标题】:Convert base64 image to file in javascript or how to pass a big base64 string with jquery ajax将base64图像转换为javascript中的文件或如何使用jquery ajax传递一个大的base64字符串
【发布时间】:2013-10-27 04:22:45
【问题描述】:

这不能占用我更多的时间。我已经尝试解决这个问题很长时间了。

我会给你我的整个场景,然后是问题所在。

我有这个网站。用户可以在一页上选择三种图像输入类型。

这是一个单选按钮组:

o Twitter Logo
o Twitter Profile Picture
o Upload picture

如果用户选择选项 1 或 2,img 标记 src 将使用本地项目文件 (http://localhost:9000/public/images/image.png) 进行更新,并且此图像 src 存储在 html5 Web Session Storage 变量中。

如果用户选择选项 3,他/她可以从他们的计算机中选择一个文件(输入 type="file" 出现在 radio 组下),并且 img 标签 src 将使用此图像更新。 这一次,我将存储在会话变量中的 src 将不是文件的路径(我知道这是出于安全原因),但 src 将是一个 base64 字符串。如果用户选择大图像,则图像非常大。

所以现在我将此图像存储在会话变量中,可以是项目文件夹中包含的图像文件的路径,也可以是 base64 编码的图像。

我现在要做的是从 JavaScript 中的会话变量中获取这个值。我想将此图像传递给我在服务器端的代码。用于制作它的实际图像并将其上传到各个地方,但这部分并不是真正必要的。

我的问题是,在 JavaScript 中,我无法通过使用 $.ajax 的 POST 来传递它。 我认为 base64 字符串太大了,我不知道如何将其转换为其他内容,比如字节 []。

我该怎么办? 我想将用户选择的此图像传递给服务器端以进行进一步处理。 然后在服务器端,我想将其转换为实际的 Image 对象或 BufferedImage。

这是它现在的代码块:

function gatherSessionValuesAndGenerateCode(userEmail) {
var email           = userEmail;
var category        = getSessionValue("category");
var itemName        = getSessionValue("itemName");
var service         = getSessionValue("service");
var accountName     = getSessionValue("accountName");
var action          = getSessionValue("action");
var imageType       = getSessionValue("imageType");
var imageFile       = getSessionValue("imageFile");
var expirationDate  = getSessionValue("expirationDate");



$.ajax({
    type: "POST",
    url: "http://localhost:9000/quikkly/business/create/generate",
    data: {
        email: email,
        category: category,
        itemName: itemName,
        service: service,
        accountName: accountName,
        action: action,
        imageType: imageType,
        imageFile: imageFile, //This is making me feel ill, don't know how to solve it.
        expirationDate: expirationDate

    },
    success: function(response){console.log("Horayyy "+response)}
});
}

【问题讨论】:

  • 不能先正常上传文件而不是先转base64吗?当然,不要忘记将enctype="multipart/form-data" 添加到<form> 标签中。
  • 真正的大字符串是什么意思?通常 POST 大小即使在 MB 中也非常大,我不认为您有一个大于 2-3 MB 的 base 64 字符串。如果仍然有,那么您可以在服务器配置中设置 POST 大小。
  • @user1679849 我没有转换它,当我获取它以将其存储在会话变量中时,它是 base64。我的网站在每一步都有几个“步骤”,用户选择一些东西,这些值存储在会话变量中,直到我收集所有变量值的最后一页。包括此图像,该图像在该页面上以 base64 格式存储在会话变量中。
  • @Peeyush 我的意思是,当用户选择文件大小为 50kb 的图像时,存储在会话变量中的 base64 字符串的长度约为 20k 个字符。

标签: javascript jquery image scala base64


【解决方案1】:

好的,我明白你的意思,但我想说的是你的字符串可能包含 20K 个字符,但我认为它不能大于 2-3 Mb,我希望你的服务器设置允许你发布数据大小为 2-3 MB。

除此之外,我认为将图像路径名称放在 base_64 中并不是一个好主意。如果您认为有人可以从您的视野中提取数据,那么他/她可以对您的完整网站概念做任何事情。

因为即使您在网页上显示某些图像,人们也可以看到图像路径。

如果您认为不希望看到路径,您可以将其保存在键值对中的某个文件中,或者您可以将其保存在数据库中。

或者您可以再做一件事,只需将图像文件名保留在您的视觉数据中,并在您想在服务器端内部使用它时添加确切的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-03
    • 2012-03-14
    • 2014-09-14
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多