Struts 文件上传 java后台接收

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Jon_jing/article/details/102725831

一般的都是form里面加enctype="multipart/form-data这个参数,这就会导致后台只能接收二进制流,不能接收其他的参数了。。所以才用这个办法。

  • 首先你得有个页面 upload.jsp

文件:<input type="file" name="uploadFile" id="myFile"/>
    <input type="button" value="上传" οnclick="read()"/>

  • 这是对应的JS方法

function read(){
        var oFile = document.getElementById("myFile");        
        if(oFile.value == ""){
           alert("请选择您要导入的文件");
           return false;
        }
        var url = 'uploadFile.action?staffId='+operId+'&relaId='+relaId;                
        $.ajaxFileUpload
        (
            {
                url:url, 
                secureuri:false,
                fileElementId:'myFile',
                dataType: 'xml',
                success: function (data, status)
                {
                    query();
                    alert("成功");
                },
                error: function (data, status, e)
                {
                    alert(e);
                }
            }
        )
        return false;
    }

  • 需要导入JS文件 

    <script type="text/javascript" src="js/jquery-1.7.1.js"></script>
    <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="js/ajaxfileupload.js"></script>

顺序不能变的,因为是按照顺序加载的。 js/jquery-1.7.1.js 和js/jquery-1.7.2.min.js都可以自行百度下载

  • ajaxfileupload.js内容见下一篇
  • 然后现在Struts2配置

<!-- 文件上传处理 -->
        <action name="uploadFile"  method="uploadFile" class="com.bl.zshr.action.UploadFileAction">

            <!-- 指定(限制)上传文件的类型,定义局部拦截器,修改默认拦截器的属性 
                "fileUpload.maximumSize" :限制上传最大的文件大小。 
                "fileUpload.allowedTypes":允许上传文件的类型。 
                "fileUpload.allowedExtensions":允许上传文件的可扩展文件类型。 -->
            <interceptor-ref name="defaultStack">
                <param name="fileUpload.maximumSize">500000000</param>
                <!-- 
                <param name="fileUpload.allowedTypes">text/plain,application/vnd.ms-powerpoint,application/vnd.ms-excel,application/msword,image/gif,image/bmp,image/jpeg</param>
                <param name="fileUpload.allowedExtensions">.txt,.ppt,.xlsx,.docx,.jpg</param>-->
            </interceptor-ref>
            <result name="success">/monthFunc/upload.jsp</result>
            <result name="input">/monthFunc/upload.jsp</result>
        </action>

后台接收 Action文件

/**
 * 文件上传类
 * by:zwj
 */
public class UploadFileAction  extends ActionSupport{
    
    UploadFileService uploadFileService;
    private File uploadFile; //得到上传的文件
        private String uploadFileContentType; //得到文件的类型
        private String uploadFileFileName; //得到文件的名称
        private long staffId;
        private long relaId;
    

    public long getStaffId() {
        return staffId;
    }
    public void setStaffId(long staffId) {
        this.staffId = staffId;
    }
    public long getRelaId() {
        return relaId;
    }
    public void setRelaId(long relaId) {
        this.relaId = relaId;
    }
    public File getUploadFile() {
        return uploadFile;
    }
    public void setUploadFile(File uploadFile) {
        this.uploadFile = uploadFile;
    }
    public String getUploadFileContentType() {
        return uploadFileContentType;
    }
    public void setUploadFileContentType(String uploadFileContentType) {
        this.uploadFileContentType = uploadFileContentType;
    }
    public String getUploadFileFileName() {
        return uploadFileFileName;
    }
    public void setUploadFileFileName(String uploadFileFileName) {
        this.uploadFileFileName = uploadFileFileName;
    }
    
    public UploadFileService getUploadFileService() {
        return uploadFileService;
    }
    public void setUploadFileService(UploadFileService uploadFileService) {
        this.uploadFileService = uploadFileService;
    }    
    
    public String uploadFile() {
        HttpServletResponse response  = ServletActionContext.getResponse(); 
        HttpServletRequest request = ServletActionContext.getRequest();
        response.setCharacterEncoding("utf-8"); //务必,防止返回文件名是乱码 
        System.out.println("fileName:"+this.getUploadFileFileName());
        System.out.println("contentType:"+this.getUploadFileContentType());
        System.out.println("File:"+this.getUploadFile());
        TyPrjFile prjFile = new TyPrjFile();
        prjFile.setFileCon(uploadFile);
        long idKey = commonService.queryIdkey();
        prjFile.setIdKey(idKey);
        prjFile.setStaffId(staffId);
        prjFile.setRelaId(relaId);
        prjFile.setUpDate(new  Timestamp(System.currentTimeMillis()));
        prjFile.setFileTp(0);
        prjFile.setFileNm(this.getUploadFileFileName());
        this.uploadFileService.insert(prjFile);
        try {
            response.getWriter().print("上传成功");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return this.SUCCESS;
    }
}

Service就不用写了,直接进入dao

public void insert(TyPrjFile jvi){
        String sql="insert into ty_prj_file(ID_KEY,RELA_ID,FILE_NM,FILE_TP,bill_type,FILE_CON,staff_id,up_date)" +
                "values("+jvi.getIdKey()+","+jvi.getRelaId()+",'"+jvi.getFileNm()+"',"+jvi.getFileTp()+","+jvi.getBillType()+",?,"+jvi.getStaffId()+",?)";
        try {
            this.insert(sql, jvi);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void insert(String sql, final TyPrjFile pf) throws FileNotFoundException {
        final InputStream blobIs = new FileInputStream(pf.getFileCon());

        jdbcTemplate.execute(sql, new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
            protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException {
                lobCreator.setBlobAsBinaryStream(ps, 1, blobIs, (int) pf.getFileCon().length()); // File转Blob的
                ps.setTimestamp(2, pf.getUpDate());

            }
        });

    }

lobHandler 需要注意一下,得在applicationContext.xml文件里面配置

<bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"
    lazy-init="true"/>
    <bean id="oracleLobHandler" 
        class="org.springframework.jdbc.support.lob.OracleLobHandler" 
        lazy-init="true">
           <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
    </bean>

下面Bean----TyPrjFile

public class TyPrjFile {
    private int num;
    private long idKey;
    private long relaId;
    private String fileNm;
    private int fileTp;
    private File fileCon;
    private long billType;
    private Timestamp upDate;
    private long staffId;

// 自行getting setting

}

over -----

猜你喜欢

转载自blog.csdn.net/Jon_jing/article/details/102725831