使用FormData上传base64编码的图像?

use*_*947 10 javascript form-data

我有一个jpeg作为base64编码的字符串.

var image = "/9j/4AAQSkZJRgABAQEAS..."
Run Code Online (Sandbox Code Playgroud)

我想使用FormData将此jpeg上传到服务器.

var data = new FormData();
Run Code Online (Sandbox Code Playgroud)

将图像附加到数据的正确方法是什么?

DIN*_*ari 16

 var imgBase64 = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCA..." //your bse64 image

onSubmit(){
const file = DataURIToBlob(imgBase64)
const formData = new FormData();
formData.append('upload', file, 'image.jpg') 
formData.append('profile_id', this.profile_id) //other param
formData.append('path', 'temp/') //other param
}

    function DataURIToBlob(dataURI: string) {
        const splitDataURI = dataURI.split(',')
        const byteString = splitDataURI[0].indexOf('base64') >= 0 ? atob(splitDataURI[1]) : decodeURI(splitDataURI[1])
        const mimeString = splitDataURI[0].split(':')[1].split(';')[0]

        const ia = new Uint8Array(byteString.length)
        for (let i = 0; i < byteString.length; i++)
            ia[i] = byteString.charCodeAt(i)

        return new Blob([ia], { type: mimeString })
      }
Run Code Online (Sandbox Code Playgroud)

  • 我浪费了两天的时间,终于成功了。我可以确认这适用于博览会、图像选择器和.net core。将其与正常获取一起使用。 (3认同)
  • 不错的工作!。我不明白为什么没有任何 js 原生方法可以做到这一点。不管怎样,这种方法效果很好,至少对我来说是这样。 (2认同)

Hea*_*ode 9

您的图像数据只不过是一个字符串,所以将它附加到您的FormData对象,如下所示:

data.append("image_data", image);
Run Code Online (Sandbox Code Playgroud)

然后在服务器端,您可以将其直接存储在数据库中,或将其转换为映像并将其存储在文件系统中.您可能会发现这篇文章很有用.


Kev*_*vin 5

我发现这篇文章(将Data URI转换为File然后追加到FormData)非常有帮助。如果您的文件已经表示为base64编码的字符串,则首先需要从中创建一个blob表示,然后可以使用FormData append。