Javascript Struts2操作表单数据使用Base64上载图像的最大大小

Javascript Struts2操作表单数据使用Base64上载图像的最大大小,javascript,java,struts2,base64,httprequest,Javascript,Java,Struts2,Base64,Httprequest,我有一个Struts2操作,它接收一个字符串,其中包含Base64中的一个图像和另一个图像名称字符串 对于小尺寸的图像,一切都很好。但是当我尝试发送一个更大的图像时,Base64和图像名称字符串在操作实现中被设置为null 在搜索解决方案时,我发现文件上载的默认最大大小为2MB。此限制可通过以下属性增加: 52428800 52428800 然而,这是行不通的。这个实现可能不是文件上传,而是两个字符串的POST请求 有没有办法增加post请求的大小?或者问题是别的 public class

我有一个Struts2操作,它接收一个字符串,其中包含Base64中的一个图像和另一个图像名称字符串

对于小尺寸的图像,一切都很好。但是当我尝试发送一个更大的图像时,Base64和图像名称字符串在操作实现中被设置为null

在搜索解决方案时,我发现文件上载的默认最大大小为2MB。此限制可通过以下属性增加:


52428800
52428800
然而,这是行不通的。这个实现可能不是文件上传,而是两个字符串的POST请求

有没有办法增加post请求的大小?或者问题是别的

public class GalleryAction  extends BaseAction {

private String imageBase64;

private String imageName;

...

public final String uploadOperation() throws Exception {

    if (this.imageBase64 == null || this.imageBase64.length() == 0
            || this.imageName == null || this.imageName.length() == 0) {
        throw new Exception("Invalid argument");
    }
    byte[] decodedBytes = Base64Decoder.decode2bytes(this.imageBase64);
    InputStream is = new ByteArrayInputStream(decodedBytes);

    Graphics graphics = MGraphics.insertImageToDataBase(this.imageName, is);

    // Issue server to sync image.
    RestUtils.syncImage(graphics.getId());

    JSONObject response = new JSONObject();

    response.put("statusCode", "0");
    jsonString  = response.toString();

    return JSON_RESPONSE;
}

...
}
编辑: 我忘记发布图片上传的代码了

Gallery.prototype.upload = function(base64, imageName) {
var galleryObject = this;

galleryObject.loadingCallback(true);

$.post(this.urlBase + "/upload", {
    "imageBase64" : base64.match(/,(.*)$/)[1],
    "imageName" : imageName
}, function(data) {
    galleryObject.handlerErrorMessageCallback();

    galleryObject.loadingCallback(false);

    galleryObject.refreshImageGalleryCallback();

}, "json")

.fail(function() {
    galleryObject.handlerErrorMessageCallback("error.upload.image");

    galleryObject.loadingCallback(false);

});
}

我更改了上传方法以形成数据

Gallery.prototype.upload = function(base64, imageName) {

var galleryObject = this;
galleryObject.loadingCallback(true);

var request = new FormData();                   
request.append("imageBase64", base64.match(/,(.*)$/)[1]);
request.append("imageName", imageName);

$.ajax({url:this.urlBase + "/upload",
    data: request,
    type: "POST",
    processData: false,
    contentType: false,
    success: function(result)
        {
            galleryObject.handlerErrorMessageCallback();
            galleryObject.loadingCallback(false);
            galleryObject.refreshImageGalleryCallback();
        }
}).fail(function() {
    galleryObject.handlerErrorMessageCallback("error.upload.image");
    galleryObject.loadingCallback(false);
});
}
使用此post方法时,strus.xml上必须存在以下属性

<constant name="struts.multipart.maxSize" value="104857600" />

HTTP协议规范没有对POST消息的大小设置限制。但是,您的应用服务器会这样做(主要是为了防止DDoS攻击)

通常,这个阈值是10兆字节,这就是您要达到的阈值。然后,您应该能够根据AS规格自定义此设置

这就是说,这是不鼓励的,并可能导致安全漏洞

最好是:

  • 应用程序/x-www-form-urlencoded上使用
    多部分/表单数据

  • 使用
    文件
    而不是
    字符串
    ,因为上载的是文件,而不是字符串


  • 您确定它是
    post
    ?请参阅。阈值是10兆字节吗?@AleksandrM是的,它是。我可以看到DeevOper工具的请求。这种方法应该从开发开始就使用。在Struts2中配置文件上载比所采用的方法容易得多。谢谢