如何从DOM发送图像,作为表单的一部分



短版本:

如何使用JavaScript将文档对象模型中的图像对象附加到表单,以便将其发送到服务器,而无需用户使用input-type=file标记手动附加?

描述:

我需要一个用户能够查看网页上的一系列图片,这些图片是他粘贴的链接的预览,选择一个,并将其自动附加到表单上,与他写的文本一起发送,并由现有的PHP处理,作为新帖子的一部分,就像他使用输入type="file"接口来附加它一样。

问题是,图片作为文档对象模型的一部分存在于浏览器中,它需要以某种方式成为他的表单的附件,才能将其文本作为新帖子提交。我试过做一个隐藏的输入,并使其值等于图像,但这似乎不起作用。

解决方案可以是jQuery,也可以是手工编码的,我已经使用JavaScript 18年了,所以我可以理解其中任何一种。。。我只是不知道如何将DOM对象作为文件附加到服务器并作为表单的一部分进行处理

示例代码:

这不是实际的代码,它很复杂,需要使用JSON来提取PHP中URL的预览并将其发送回用户,但它总结了问题:

<img id="image[0]" src="images/image0.jpg" onclick="attachimage(0)"/>
<img id="image[1]" src="images/image1.jpg" onclick="attachimage(1)"/>
<img id="image[2]" src="images/image2.jpg" onclick="attachimage(2)"/>
<form method="post">
<input type="text" name="title"/>
<textarea name="description"></textarea>
<input type="hidden" name="theimage" id="theimage">
<input type="submit" name="post" value="save">
</form>
<script>
var attachimage = function(item) {
// So far, nothing like this next line has worked for me,
// the image never shows up in the saved post
$("#theimage").val(document.getElementById("image[" + item + "]"));
}
</script>

上下文:我正在开发一个Wordpress网站,使用BuddyPress,允许用户在没有编辑权限和使用Dashboard的情况下发布自己的链接(a-la Digg和Reddit)。我正在使用一个名为BuddyBlog的插件(它使用bp简单的前端帖子)来让用户做这件事,效果很好。。。

但所有者也希望在粘贴URL时显示预览,就像在Facebook上一样。我没有发现任何已经集成了这两个功能(用户发布和预览)的东西,所以我从web上提取了一些开源代码,这些代码获取URL,通过JSON将其发送到服务器,服务器通过PHP获取标题、描述和图像,并将结果作为格式化的HTML块发送回。然后我获取这些结果的值,并将它们插入BuddyBlog表单字段中。。。但是BuddyBlog的表单预计图像会通过出现

<input type="file" name="bp_simple_post_upload_0">

我不认为我可以简单地将bp_simple_post_upload_0的值设置为等于图像[0]的源

如果您已经在服务器上处理了图像并创建了预览,则意味着它们已经存在。所以只需要输入一些变量来表示选择了哪张图片,就可以得到相应的图像。它已经在服务器上了。

如果图像是用画布之类的动态生成的,那么您可以发送它们的base64散列。