java文件上传

摘要:
“);return”false“;}vardata=newFormData();data.append;data.aappend;$.ajax({url:”uploadFile.action“,type:”POST“,async:false,cache:false,processData:false;//告诉jQuery不要处理发送的数据内容类型:false,data:data,complete:function(XMLHttpRequest,textStatus){if(textStatus==='timeout'){varxmlhttp=window.XMLHttp Request?

技术架构: Struts2 + JSP + jQuery

java文件上传第1张

普通标签上传文件

页面标签

<tr>
    <td class="table_a_td_l">上传附件:</td>
    <td colspan="2"class="table_a_td_r">
        <input name="uploadFile"id="uploadFile"type="file"style="170px;"onchange="return saveData('uploadFile')" >
    </td>
</tr>

前端js

functionsavaData(labelId) {
    //调用文件上传的JS方法
    var result =ajaxFileUpload(labelId, 30*1024*1024);
    
    if(result == 'false') {//返回false, 上传失败
        return false;
    }else{
        alert(result.fileName);    //原文件名
        alert(result.fileNewName); //新文件名
        alert(result.filePath);    //上传到磁盘路径
        return false;
    }
}

/**
 * 上传文件
 * labelId: 上传控件的Id
 * fileSizeLimit: 上传大小限制(字节)
 */
functionajaxFileUpload(labelId, fileSizeLimit) {
    //获取到文件对象
    var file = $("#"+labelId)[0].files[0];
    result = "false";
    if(null !=file) {
        var byteSize =file.size;
        if (byteSize >fileSizeLimit) {
            alert("上传文件大小不能超过"+fileSizeLimit/1024/1024+"MB!");
            return "false";
        }
        var data = newFormData();
        data.append("file", file);
        data.append("filename", file.name);
        $.ajax({
                url : "uploadFile.action",
                type : "POST",
                async : false,
                cache : false,
                processData : false,//告诉jQuery不要去处理发送的数据
                contentType : false,
                data : data,
                complete:function(XMLHttpRequest,textStatus){  
                    if(textStatus=='timeout'){  
                        var xmlhttp = window.XMLHttpRequest ? new window.XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHttp");  
                        xmlhttp.abort();   
                        alert("网络超时"); 
                        return "false";
                    }  
                }, 
                success : function(data) {
                    if(data.isOk) {
                        //data={"isOk":"true/false", "fileName":"原文件名", "fileNewName":"新文件名", "filePath":"上传到磁盘路径"}
                        result =data;
                    } else{
                        alert(data.info);
                        return "false";
                    }
                },
                error : function(err) {
                    fileUploadFalg = false;
                    alert(err);
                    return "false";
                },
            });
    }
    returnresult;
}

后台Java代码

importorg.apache.commons.io.FileUtils;
importorg.apache.commons.io.FilenameUtils;

//用于返回json(setter/getter)
private Map<String,Object> validateExists = new HashMap<String, Object>(); 
//文件上传(setter/getter)
privateFile file;
privateString fileName;

@Action(value = "uploadFile", interceptorRefs ={
        @InterceptorRef(value = "fileUpload", params={"maximumSize", "314572800"}),
        @InterceptorRef(value = "basicStack")
        },
        results ={ 
        @Result(name = "success", type = "json", params= {"root","validateExists"}) })
publicString uploadFile(){
    //通过config.properties配置一个文件存放路径, 如D:/upload/jrzx/
    String filePath = FilePathUtil.FILE_ROOT + FilePathUtil.SEPARATOR + Config.getProperty("file.jrzx.logo") +FilePathUtil.SEPARATOR;
    try{
        String storageFileName =generateFileName(fileName);
        if (null !=file) {
            if (314572800 < file.length()) { //大小不能超过300M
                validateExists.put("isOk", false);
                validateExists.put("info", "文件大小不能超过300M");
            } else{
                File path = new File(filePath +storageFileName);
                if(path.exists()) {
                    FileUtils.deleteQuietly(path);
                }
                FileUtils.moveFile(file, path);
                validateExists.put("fileName", fileName);
                validateExists.put("fileNewName", storageFileName);
                validateExists.put("filePath",FilePathUtil.getVirtualPathBya( filePath +storageFileName));
                validateExists.put("isOk", true);
                validateExists.put("info", "上传成功");
            }
        } else{
            validateExists.put("isOk", false);
            validateExists.put("info", "请选择正确的文件格式和文件大小");
        }
    } catch(Exception e) {
        e.printStackTrace();
        StringWriter sw = newStringWriter();
        PrintWriter pw = newPrintWriter(sw);
        e.printStackTrace(pw);
        log.error(sw.toString());
        validateExists.put("isOk", false);
        validateExists.put("info", "系统异常,请稍候重试!");
    }
    returnSUCCESS;
}

privateString generateFileName(String fileName) {
    String newFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + (int)(Math.random()*9000+1000);
    String prefix =FilenameUtils.getExtension(fileName);
    if (!Tool.isEmpty(prefix)) {
        newFileName += "." +prefix;
    }
    returnnewFileName;
}

将上传控件修改为按钮(可以方便的修改样式)

下面这种方式应该也适合用"点击图片上传文件", 暂未尝试, 应该没问题

页面标签

<td class="table_a_td_l">上传附件:</td>

<!--<td colspan="2" class="table_a_td_r">
    <input name="uploadFile"   type="file"> onchange="return savaData('attributeId', 'uploadFile', 999*1024*1024)" 
</td> -->

<s:hidden name="news.filePath" ></s:hidden>
<s:hidden name="news.fileOldPath" ></s:hidden>
<s:hidden name="news.fileName" ></s:hidden>
<s:hidden name="news.fileOldName" ></s:hidden>
<td colspan="1"class="table_a_td_r">
    <label for="fileinp">
            <input type="button"value="选择文件">
                <s:if test="news.fileName != null"><span id="uploadFileBtnText">${news.fileName}</span></s:if>
                <s:else><span id="uploadFileBtnText">未选择任何文件</span></s:else>
            <input name="uploadFile"id="uploadFile"type="file"onchange="return fileChange('未选择任何文件')">
            
    </label>&nbsp;
    <label>
        <input type="button"value="删除"onclick="deleteUploadFile('未选择任何文件')">
        <!--<img src="http://t.zoukankan.com/${basePath}/images/sc.gif" alt="删除"    border="0"  /> -->
    </label>
</td>
<style>label{position:relative;
    }#uploadFile{position:absolute;left:0;top:0;opacity:0;
    }
</style>

前端js

//当附件信息变更时的操作
function fileChange(defaultMsg) {
    var uploadFilename = $("#uploadFile").val();
    if(isEmpty(uploadFilename)) {
        $("#uploadFileBtnText").html(defaultMsg);
        $("#newsForm_news_fileName").val("")
    }else {
        var arr = uploadFilename.split("\");
        $("#uploadFileBtnText").html(arr[arr.length-1]);
        $("#newsForm_news_fileName").val(arr[arr.length-1])
    }
    
}

function deleteUploadFile(defaultMsg) {
    if(isEmpty($("#newsForm_news_fileName").val())){
        alert("不存在需要删除的附件!");
        return false;
    }
    
    if(confirm("你确定删除附件吗?

删除附件需要提交后才能生效!")){
        $("#uploadFileBtnText").html(defaultMsg);
        $("#newsForm_news_fileName").val("")
        return false;
    }
    
}

function saveNews(){
    if(confirm("你确定提交吗?") && checkForm()){
        var hasFile = $("#uploadFileBtnText").html();
        var filePath = $("#newsForm_news_filePath").val();
        var fileName = $("#newsForm_news_fileName").val();
        var fileOldName = $("#newsForm_news_fileOldName").val();
        
        //只要存在数据, 那就上传数据(因为即使文件名相同, 内容可能变更了), 然后后台再删除旧的数据
        var result = "false";    var labelId = "uploadFile";   var fileSizeLimit = 999*1024*1024;
        if( !isEmpty(fileName) && !isEmpty($("#"+labelId)[0].files[0])) {
            result = ajaxFileUpload(labelId, fileSizeLimit); //上传文件
        }else { //不存在数据, 不需要上传
            result = {"filePath":"", "fileName":""}; 
        }
        
        //alert($("#uploadFileBtnText").html());
        if(result != 'false') {//如果返回false
            //alert("上传文件成功");
            //alert(result.fileName);    //原文件名
            //alert(result.fileNewName); //新文件名
            //alert(result.filePath);    //上传到磁盘路径
            //将当前的附件信息设置到隐藏域
            $("#newsForm_news_filePath").val(result.filePath);
            $("#newsForm_news_fileName").val(result.fileName);
            //提交表单,保存数据
            var rebutUrl = "saveNewsOfCs.action";
            //$("#domains").val(getSelectTree("showDomains"))
            $("#newsForm").attr("action", rebutUrl).submit();
            return true;
        }else {
return false;
} }else{ return false; } }

免责声明:文章转载自《java文件上传》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇WindowsForm 公共控件 菜单和工具栏canvas---绘制图表以及拖拽下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

background:url 的使用方法

1#pingfenli{227px;3float:left;4height:28px;5cursor:pointer;6background:urlno-repeat00;7list-style:none;8}background:url的使用方法,后面的两个数字代表的是图片在屏幕上显示的位置。...

更改nexus的工作目录

默认情况下,nexus的工作目录位于${user_home}/sonatype工作目录中。在Linux中,如果用户是root用户,则使用/root/sonatype。这便于通过war将nexus安装到servlet容器中,但不利于服务器的集中管理。这需要更改默认的nexus工作目录位置。为了方便管理,您可以选择使用环境变量。...

Notepad++正则表达式查找替换文本中文字符

测试需求测试工具中xml配置文件中的注释字段包含中文字符。Win10系统中使用的工具中偶尔会出现中文乱码,导致配置文件无效。解决方案是将配置文件中的中文注释替换为英文注释,或者直接替换和删除。如何查找和删除配置文件中的汉字?“记事本”中使用正则表达式[^x00 xff]来匹配汉字。替换完成如下3。所有汉字已被替换。...

十四、ES开启密码认证

所以我们需要为es head和kibana添加密码认证。4、 为kibana设置密码。1.为kibana配置证书。因为kibana和es之间的连接也需要证书加密通信。mkdir-p/etc/kibana/certscp/etc/selastic search/certs-*/etc/kibana/certs/2.授予kibana主要权限。权限必须为kiban...

uniapp打包h5 出现'连接服务器超时,点击屏幕重试'的页面

跟踪以首先找出原因全局组件AsyncErrorNew在中注册。js文件可以自定义。我很快就过去了,所以我添加了一个空白页面,然后在清单中介绍了组件。json文件...

数据库软考易混淆知识之信息化基础、项目管理

2、 关键路径关键路径是活动图中最长的路径示例:图中显示了软件项目的活动图,其中固定点表示项目里程碑,连接顶点的边表示包含的活动,边上的数字表示活动持续时间的天数,则完成项目的最短时间为()天,活动EH和IJ的放松时间分别为()日。...