码迷,mamicode.com
首页 > 编程语言 > 详细

Java+jsp文件上传(ajax)的方式

时间:2018-06-06 18:30:25      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:ipa   回调   har   catch   提示   click   close   序列化表单   document   

今天在开发项目的时候碰到了一个需求,一个简单的文件上传。但是上传后需要通过回调函数做一些上传完毕的操作。发现通过<form><file><input submit>能做到文件上传,但是回调函数不是很好实现。 于是打算改用ajax的形式去提交。以下是实现的代码:

 

jsp页面:(css样式和标签引入属于自己定制的,与本文无关,直接去了就好);

    <%@page language="java" contentType="text/html; charset=utf-8"%>
    <%@include file="/tagDeclare.jsp"%>
    <%@include file="/headDeclare.jsp"%>
</head>
    <body>
        <form
    action="${basePath}market/contractDocumentAction!fileUpload.action"
            name="aform" method="post" id="actionForm"
            ENCTYPE="multipart/form-data">
            <div class="dialogTop">
                <table width="400" border="0" align="center" cellpadding="0"
                    cellspacing="10">
                    <tr>
                        <td>请选择文件</td>
                        <td><input name="upload" type="FILE" id="attach" size="10"></td>
                        <input type="hidden" name="conId" id="cid" value="${contractId}" />
                    </tr>
                </table>
            </div>
            <div class="dialogBottom">
                <div class="btns">
                    <input type="button" class="ldBtnGreen" value="提交" onclick="sub()" />
                    <input type="button" class="ldBtnGray" value="关闭"
                        onclick="ldDialog.close();" />
                </div>
            </div>
        </form>
    
    </body>
    </html>

javaScript:

<script type="text/javascript">
        function sub() {
            var fileObj = document.getElementById("attach").files[0]; // js 获取文件对象 ie8以下不支持files
            if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
                ldDialog.alert("请选择文件");
                return;
            }
            if(fileObj.size >(1024*1024*10))
            {
                ldDialog.alert("不能上传超过10Mb的文件!");
                return;
            }
            var formFile = new FormData();
            formFile.append("file", fileObj); //加入文件对象
            formFile.append("conIds", $("#cid").val()); //附加参数1  因为不能序列化表单,提交的时候将form的非文件域的值获取到后拼装到此处。后台获取参数的方法不变
            formFile.append("filename", fileObj.name);//附加参数2
            var data = formFile;
            $.ajax({
                url : "${basePath}market/contractDocumentAction!fileUpload.action?" ,
                data : data,
                type : "Post",
                dataType : "json",
                cache : false,//上传文件无需缓存
                processData : false,//用于对data参数进行序列化处理 这里必须false,如果序列化处理了 那么form中的file怎无法提交。
                contentType : false, //必须
                success : function(result) {
                    ldDialog.close("上传合同文件成功");
                    return;
                }
            })
    
        }
    </script>

Struts2 Action代码

public class ContractDocumentAction extends ActionSupport {

    // 封装上传文件属性
    private File file;
    // 封装上传文件名称
    private String filename;


    public String getFilename() {
        return filename;
    }

    public void setFilename(String filename) {
        this.filename = filename;
    }public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }

public void fileUpload() {
    
        String filenames = sdf.format(new Date()) + "_" +contract.getSerialNum() + "_" + filename;//文件名
        String serverPath = System.getProperty("catalina.home");
        InputStream is;

        try {
            is = new FileInputStream(file);
            String fpath = serverPath + File.separator + "file";//文件保存路径 tomcat下的file文件夹
            OutputStream os = new FileOutputStream(new File(fpath, filenames));
            byte[] buffer = new byte[is.available()];//这里尽量不要使用new byte[1024]之类的写法。可能会导致word文档上传之后提示文件损坏。
            int length = 0;
            while (-1 != (length = is.read(buffer, 0, buffer.length))) {
                os.write(buffer);
            }
            os.close();
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }




}        

 

Java+jsp文件上传(ajax)的方式

标签:ipa   回调   har   catch   提示   click   close   序列化表单   document   

原文地址:https://www.cnblogs.com/easyunion/p/9146006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!