我的客户让用户选择一张图片,裁剪并调整它的大小,然后显示它(在<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 的限制。