我的客户希望用户选择一张图片,进行剪裁和调整大小,然后展示它(在一个 <img>
DOM 元素中)。
如果图片没问题,用户可以将其上传到服务器以便保存。
我想要通过Ajax请求来完成上传。
我在互联网上找到了很多例子,用于上传从客户端PC获取的原始图片。例如:
$( '#my-form' )
.submit( function( e ) {
$.ajax( {
url: 'http://host.com/action/',
type: 'POST',
data: new FormData( this ),
processData: false,
contentType: false
} );
e.preventDefault();
} );
如果我决定上传通过表单输入检索到的图片,则这将正常工作。
在我的情况下,我想要上传被修改后的图片(保存在<img>
元素中),而不是原始图片。
此图片以base64格式存储(供参考:我使用croppie.js库生成图像)。
我不知道如何使用Ajax上传这张图片。
我尝试将其作为普通参数上传,但服务器端的img为空字符串:
var url = 'http://host.com/action/';
var data = {};
data.img = $('img#generated-image').attr('src');
$.ajax({url: url, type: "POST", data: data})
.done(function(e){
// Do something
});
// RESULTS in a empty data.img on the server side.
我的问题是在检索"img"参数时,服务器收到一个空字符串。我怀疑是图片可能太大而无法传递给服务器,或者其他我不理解的问题...。
所以我想知道使用Ajax请求发送base64图像到服务器的正确方法而不使用表单。
感谢您的帮助。
编辑
似乎是xmlHTTP POST参数大小的问题。我试图减少图像的字符串表示中的字符数,现在服务器能够检索它。
编辑2
在php.ini文件中,post_max_size设置为8M,而图片大小只有24K。因此问题不在那里。
我正在使用带有Symfony2框架的PHP。
可能是Symfony2的限制。