如何将img标记中的图像作为文件或formData而不是base64上载到其他服务器

时间:2017-10-27 06:07:22

标签: javascript ajax flask

基本上,网站上有很多图片。用户通过单击选择一个图像,然后将其上传到其他服务器。

我有一个实现,它在img标签中读取用户选择的图像src,并将其作为通过ajax附加到URL末尾的base64字符串上传到不同的服务器。

我希望将此图片上传为formData或文件上传。有什么帮助吗?

我当前的实现使用文件阅读器的输出创建formData并将其作为数据上传到ajax:

var img_data = new FormData();
// img is output of file reader which looks like "data:image/jpg;base64,XXX"
img_data.append("image", img, "site_image.jpg");

$.ajax({
    type : 'post',
    url : "other server url",
    data : img_data,
    contentType: "image/jpeg",
    processData: false,
...}),

但我在烧瓶服务器中看不到任何有用的数据。这是烧瓶中的输出:

files: len: 0 type: <class 'werkzeug.datastructures.ImmutableMultiDict'>
[]
data: len: 136 type: <type 'str'>
------WebKitFormBoundaryJ8YC9pZxjqRl0tyD
Content-Disposition: form-data; name="image"


------WebKitFormBoundaryJ8YC9pZxjqRl0tyD--

form: len: 0 type: <class 'werkzeug.datastructures.ImmutableMultiDict'>
ImmutableMultiDict([])

在数据str中有奇怪的东西,但无法获取任何图像数据。

1 个答案:

答案 0 :(得分:0)

在不转换为base64的情况下上传图片需要您使用FormData

对我来说,我使用jQuery Form,它会为你模仿ajax帖子,并且(如果 浏览器不支持的方法)。

如果您想手动完成,请参阅此问题及其最佳答案:
How to use FormData for ajax file upload