如何将多部分文件数据传递给Web服务

时间:2014-12-24 10:31:31

标签: web-services servlets multipart

我想做这样的事情。

1.从多部分中的jsp上传文件

2.Calling servlet

3.在该servlet的dopost中,我想调用一个webservice,它将jsp传递的所有参数与多部分数据一起传递给servlet。

dopost(javax.servlet.http.HttpServletRequest request,
            javax.servlet.http.HttpServletResponse response){

    webserviceMethod(request,response);

}

我坚持第三点,我可以将所有请求参数设置为webservice方法。但我不知道如何将多部分文件数据传递给websevice。我没有这样做。我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

看看那个jquery插件:

http://jquery.malsup.com/form/

我也在我的应用程序中使用它和java servlet:

 uploadImage: function (e) {
        var self = this;
        self.ignoreDrag(e);
        if ($('#feed_imageUploader').find('input').hasClass('error')) {
            return;
        }
        //cant put this in an model - ajaxSubmit has no done callback
        $('#img_uploaded h1').text(polyglot.t('iview.loading'));
        $('#feed_imageUploader').ajaxSubmit({
            target: '#img_uploaded',
            type: "POST",
            url: path.apiPath + 'item.uploadImg/' + self.itemId + '/' + token,
            dataType: "text",
            async: true,
            success: function () {
                self.afterUploadImage();
            }
        });

    },
 afterUploadImage: function () {
        var self = this;
        self.changed = true;
        var xFactorItemImage = 0;
        var yFactorItemImage = 0;
        var randomnumber = Math.floor(Math.random() * 10100000);
        $('#img_uploaded').html("<img src=\"" + path.tempImage + userId + "_" + self.itemId + ".jpg?id=" + randomnumber + "\" style=\"display:none\" id=\"cropPhoto_uploaded\">");
        var theImage = new Image();
        var cropPhoto = $('#cropPhoto_uploaded');
        theImage.src = cropPhoto.attr("src");
        var widthPhoto = 0;
        var heightPhoto = 0;
        var NwidthPhoto = 0;
        var NheightPhoto = 0;
        $(theImage).load(function () {
            $('#img_uploaded h1').empty();
            $('#additemimage').hide();
            NwidthPhoto = theImage.width;
            NheightPhoto = theImage.height;
            cropPhoto.css({
                maxHeight: $('#img_uploaded').height() + 'px',
                maxWidth: $('#img_uploaded').width() + 'px'
            });
            cropPhoto.show();
            $('#addimage_upload').fadeIn(aSpeed.middle);
            widthPhoto = cropPhoto.width();
            heightPhoto = cropPhoto.height();
            xFactorItemImage = NwidthPhoto / widthPhoto;
            yFactorItemImage = NheightPhoto / heightPhoto;
            cropPhoto.Jcrop({
                setSelect: helper.getMiddleSelectionOfImage(widthPhoto, heightPhoto, widthPhoto, heightPhoto),
                bgOpacity: 0.3,
                onChange: showItemImageCoords,
                onSelect: showItemImageCoords
            });
        });

        function showItemImageCoords(c) {
            $('#x111').val(parseInt(xFactorItemImage * c.x));
            $('#y111').val(parseInt(yFactorItemImage * c.y));
            $('#x222').val(parseInt(xFactorItemImage * c.w));
            $('#y222').val(parseInt(yFactorItemImage * c.h));
        }
    },

servlet部分:

public void UploadImage(HttpServletRequest request, String filename, String folder,String bucketname) {
    File file;
    PropertyReader mainconf = new PropertyReader();
    DiskFileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    List items ;
    mainconf.getProb("conf/MainConfig.properties");
    s3 s3=new s3();
    try {
        items = upload.parseRequest(request);
        // Process the uploaded file items
        Iterator i = items.iterator();

        //Iterate through the items
        String finalPath = "";
        FileItem fi;
        while (i.hasNext()) {
            fi = (FileItem) i.next();
            if (!fi.isFormField()) {
                // Get the uploaded file parameters               
                String your_os = System.getProperty("os.name").toLowerCase();
                String workingDir = "images";
                finalPath = mainconf.read("imagePath");
                if (your_os.indexOf("win") >= 0) {
                    finalPath = finalPath + workingDir + "\\" + folder + "\\";
                } else if (your_os.indexOf("nix") >= 0 || your_os.indexOf("nux") >= 0) {
                    finalPath = finalPath + workingDir + "/" + folder + "/";
                } else {
                    finalPath = finalPath + workingDir + "{others}" + folder + "{others}";
                }
                file = new File(finalPath + filename + ".jpg");
                fi.write(file);
                s3.writeFile(bucketname, file, filename+".jpg");
                file.delete();

            }
            break;
        }

    } catch (Exception ex) {
        Logger.getLogger(UploadItemImage.class.getName()).log(Level.SEVERE, null, ex);
    }
}