java实现多文件上传

java实现多文件上传,第1张

即使再多文件也是通过的单个文件逐次上传的(zip等压缩包实际上是一个文件)。实现思路就是将多个文件循环进行上传,上传方法举例:

/**

* 上传文件

*

* @param fileName

* @param plainFilePath 文件路径路径

* @param filepath

* @return

* @throws Exception

*/

public static String fileUploadByFtp(String plainFilePath, String fileName, String filepath) throws Exception {

FileInputStream fis = null

ByteArrayOutputStream bos = null

FTPClient ftpClient = new FTPClient()

String bl = "false"

try {

fis = new FileInputStream(plainFilePath)

bos = new ByteArrayOutputStream(fis.available())

byte[] buffer = new byte[1024]

int count = 0

while ((count = fis.read(buffer)) != -1) {

bos.write(buffer, 0, count)

}

bos.flush()

Log.info("加密上传文件开始")

Log.info("连接远程上传服务器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22)

ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22)

ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD)

FTPFile[] fs

fs = ftpClient.listFiles()

for (FTPFile ff : fs) {

if (ff.getName().equals(filepath)) {

bl="true"

ftpClient.changeWorkingDirectory("/"+filepath+"")

}

}

Log.info("检查文件路径是否存在:/"+filepath)

if("false".equals(bl)){

ViewUtil.dataSEErrorPerformedCommon( "查询文件路径不存在:"+"/"+filepath)

return bl

}

ftpClient.setBufferSize(1024)

ftpClient.setControlEncoding("GBK")

// 设置文件类型(二进制)

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE)

ftpClient.storeFile(fileName, fis)

Log.info("上传文件成功:"+fileName+"。文件保存路径:"+"/"+filepath+"/")

return bl

} catch (Exception e) {

throw e

} finally {

if (fis != null) {

try {

fis.close()

} catch (Exception e) {

Log.info(e.getLocalizedMessage(), e)

}

}

if (bos != null) {

try {

bos.close()

} catch (Exception e) {

Log.info(e.getLocalizedMessage(), e)

}

}

}

}

备注:只需要修改上传的服务器地址、用户名、密码即可进行服务器访问上传。根据实际需要修改即可。

jquery.uploadify批量上传控件

[html] 

<link href="styles/uploadify.css" rel="stylesheet" type="text/css" /> 

<script type="text/javascript" src="styles/uploadify.swf"></script> 

<script type="text/javascript" src="javascripts/jquery.uploadify.min.js"></script>  

<link href="styles/uploadify.css" rel="stylesheet" type="text/css" />

<script type="text/javascript" src="styles/uploadify.swf"></script>

<script type="text/javascript" src="javascripts/jquery.uploadify.min.js"></script> 还有jquery.js,你懂得!

这里注意哦,css文件会引用到这个图片哦,所以请你指定这个图片的位置哦,不然就没有显示这个叉叉哦,这个叉叉是删除按钮的哦,没有就是空白哦!

[javascript]

<script> 

function snedUpLoad(){ 

    var pid = $("#entityId").val()                //这个是我自己获取的自定义参数  

    var entityName = $("#entityName").val()       //同上  

    $("#uploadify").uploadify({                    //初始化uploadify  uploadify是input的id  

        //'debug' : false,                             //dubug模式 ,默认是false  

        'auto':false,                                  //自动上传,就是控件自动上传,默认是true  

        'multi':true, 

        //'successTimeout':99999,                      //超时时间  

        'formData':{'pid':pid,'entityName':entityName },//我的参数列表  

        //'fileObjName':'uploadify',                   //服务器的属性名字  

        

'uploader':'你的后台url地址jsessionid=${pageContext.session.id}',//提交服务器路径,这里

说明下jsessionid=${pageContext.session.id},这个是用于非IE内核的浏览器兼容的  

        'swf':"styles/uploadify.swf",                  //flash文件,官方的文件,引用上就是了  

        //'uploader': '/Home/Upload',                  //文件保存路径   用处不大  

        'buttonText': '文件上传',           //按钮  

        //'height':'32',                //浏览按钮的高度     

        //'width':'100',                               //浏览按钮的宽度  

        'fileTypeDesc':'支持的格式:',                 //在浏览窗口底部的文件类型下拉菜单中显示的文本  

        'fileTypeExts':'*.jpg*.jpge*.gif*.png',     //允许上传的文件后缀  

        'fileSizeLimit':'3MB',                         //上传文件的大小限制  

        'queueSizeLimit' : 25,                         //上传数量  

        'onSelectError':function(file, errorCode, errorMsg){  //返回一个错误,选择文件的时候触发  

           switch(errorCode) { 

               case -100: 

                   alert("上传的文件数量已经超出系统限制的"+$('#file_upload').uploadify('settings','queueSizeLimit')+"个文件!") 

                   break 

               case -110: 

                   alert("文件 ["+file.name+"] 大小超出系统限制的"+$('#file_upload').uploadify('settings','fileSizeLimit')+"大小!") 

                   break 

               case -120: 

                   alert("文件 ["+file.name+"] 大小异常!") 

                   break 

               case -130: 

                   alert("文件 ["+file.name+"] 类型不正确!") 

                   break 

           } 

        }, 

        'onFallback':function(){             //检测FLASH失败调用  

            alert("您未安装FLASH控件,无法上传图片!请安装FLASH控件后再试。") 

        }, 

        'onUploadSuccess':function(file, data, response){  //上传到服务器,服务器返回相应信息到data里  

            if(data){ 

                var dataObj=eval("("+data+")")//转换为json对象   

                //$('#uploadify').uploadify('upload')  

            } 

        } 

    }) 

</script> 

<script>

function snedUpLoad(){

 var pid = $("#entityId").val()                //这个是我自己获取的自定义参数

 var entityName = $("#entityName").val()       //同上

 $("#uploadify").uploadify({                    //初始化uploadify  uploadify是input的id

        //'debug' : false,                             //dubug模式 ,默认是false

        'auto':false,                                  //自动上传,就是控件自动上传,默认是true

        'multi':true,

        //'successTimeout':99999,                      //超时时间

        'formData':{'pid':pid,'entityName':entityName },//我的参数列表

        //'fileObjName':'uploadify',                   //服务器的属性名字

        

'uploader':'你的后台url地址jsessionid=${pageContext.session.id}',//提交服务器路径,这里

说明下jsessionid=${pageContext.session.id},这个是用于非IE内核的浏览器兼容的

        'swf':"styles/uploadify.swf",                  //flash文件,官方的文件,引用上就是了

        //'uploader': '/Home/Upload',                  //文件保存路径   用处不大

        'buttonText': '文件上传',   //按钮

        //'height':'32',    //浏览按钮的高度 

       //'width':'100',                               //浏览按钮的宽度

       'fileTypeDesc':'支持的格式:',                 //在浏览窗口底部的文件类型下拉菜单中显示的文本

        'fileTypeExts':'*.jpg*.jpge*.gif*.png',     //允许上传的文件后缀

        'fileSizeLimit':'3MB',                         //上传文件的大小限制

        'queueSizeLimit' : 25,                         //上传数量

        'onSelectError':function(file, errorCode, errorMsg){  //返回一个错误,选择文件的时候触发

           switch(errorCode) {

               case -100:

                   alert("上传的文件数量已经超出系统限制的"+$('#file_upload').uploadify('settings','queueSizeLimit')+"个文件!")

                   break

               case -110:

                   alert("文件 ["+file.name+"] 大小超出系统限制的"+$('#file_upload').uploadify('settings','fileSizeLimit')+"大小!")

                   break

               case -120:

                   alert("文件 ["+file.name+"] 大小异常!")

                   break

               case -130:

                   alert("文件 ["+file.name+"] 类型不正确!")

                   break

           }

        },

        'onFallback':function(){             //检测FLASH失败调用

            alert("您未安装FLASH控件,无法上传图片!请安装FLASH控件后再试。")

        },

        'onUploadSuccess':function(file, data, response){  //上传到服务器,服务器返回相应信息到data里

         if(data){

          var dataObj=eval("("+data+")")//转换为json对象

    //$('#uploadify').uploadify('upload')

         }

        }

    })

}

</script>

 

[javascript]

$(function(){ 

    snedUpLoad()    //jquery容器加载完运行我们的函数  

}) 

$(function(){

    snedUpLoad()    //jquery容器加载完运行我们的函数

})

 

 

[html]

<input type="file" name="uploadify" id="uploadify" />  //申明控件的容器 

<input type="file" name="uploadify" id="uploadify" />  //申明控件的容器

前台页面代码基本就这样了,很好明白,至于后台逻辑和普通上传处理一致的,这里就不列出来的,最后上一张图给大家鉴赏一下

(tip:其实他的批量上传并不是一次全部提交处理的,他是一个一个依次提交,相当是一个for循环,所以后台处理的同时只是一个文件上传,即排序的处理上传文件,就和单个文件上传的代码一样,如果你早有后台的单文件上传代码就不用改,直接调用就行了,可以共用)

要看情况:

1. 若上传文件直接保存成数据库中的blob字段,那就无所谓文件名了;

2. 若上传文件保存到服务器的某个文件夹中,那么为了避免重名,上传的文件一定要重命名,做法一般是:首先生成一串不会和其他文件相同的名称,例如序列的值、上传时间(精确到毫秒)等;其次,将上传的文件保存到该文件名中;最后,向数据库中记录原上传的文件名、以及生成的文件名。这样,向用户显示的是用户上传的名称,但下载时按数据库中的记录按图索骥即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12033695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存