js - java 上传文件

本文详细介绍两种前端文件上传方法,一是使用FormData对象模拟表单上传,二是利用jQuery的ajaxSubmit方法结合form表单实现。深入探讨了前后端交互细节,包括前端如何设置请求参数及后端如何解析接收。

 

 


方法一:

FormData

模拟创建一个表单,

 

 

<input type="file" id="fileUrl" name="fileUrl" >

 

 

//上传控件

var filePoint = $('#fileUrl');

//表单对象

var formData = new FormData();

formData.append('file', filePoint[0].files[0]);

formData.append('cityId', cityId);

$.ajax({

    type:"post",

    url:"/test/1",

    enctype: 'multipart/form-data',

    async:true,

    contentType: false,    //这个一定要写

    processData: false, //这个也一定要写,不然会报错

    data:formData,

    dataType:'json',    //返回类型,有json,text,HTML。这里并没有jsonp格式,所以别妄想能用jsonp做跨域了。

    success:function(data){

},

error:function(){

},

 

后端java

 

 

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.multipart.MultipartHttpServletRequest;

 

@RequestMapping("/1")

@ResponseBody

public Object analyseXls(MultipartHttpServletRequest multipartRequst) {

    BackMsgEntity backMsg = new BackMsgEntity();

 

    if(multipartRequst == null){

        backMsg.setMsg("服务请求失败,请重试");

        log.error("服务请求失败,MultipartHttpServletRequest空指针");

        return backMsg;

    }

    MultipartFile fileLink = multipartRequst.getFile("fileUrl");

    String fileName = fileLink.getOriginalFilename();       //文件名

    String cityId = multipartRequst.getParameter("cityId"); //登录账号省份

 

    //存文件

  fileLink.transferTo(new File(fileUrl));

 

}

transferTo() 方法会自动覆盖已存在的文件,经试验采用的应该是TCP/IP协议

 


方法二:

    ajaxSubmit

    需要引入 jquery-form.js    我用的是jquery-form.mini.js

 

    需要form表单

 

<form id="fileForm" onsubmit="return uploadFile();">

    <input type="file" id="fileUrl" name="fileUrl" >

    <input type="hidden" value="SC" name="cityId" id ='cityId'>

</form>

<button onclick="uploadFile()">上传xls文件</button>

input 一定要加上name属性,因为后台是更具name值来读取变量的。

 

 

function uploadFile(){

 

var fileForm= $("#fileForm");

 

fileForm.ajaxSubmit({

    url: "/test/1",

    type: 'post',

    dataType: 'json',

    success: function(data){

        if(data.flag == 1){

            toastr.success(data.msg);

        } else {

            toastr.error(data.msg);

        }

    },

    error: function(data){

        toastr.error('请求服务异常!');

    }

});

return false;

 

}

返回 false 阻止工单提交导致的跳转刷新

 

后台同“方法一”

简单的利用javajs实现文件上传 package com.fendou.myString; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUpload extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { boolean a=ServletFileUpload.isMultipartContent(request); if(a){ FileItemFactory factory=new DiskFileItemFactory(); ServletFileUpload upload=new ServletFileUpload (factory); Iterator items; try{ items=upload.parseRequest (request).iterator(); while(items.hasNext()){ FileItem item=(FileItem) items.next(); if(!item.isFormField()){ String name=item.getName (); String fileName=name.substring(name.lastIndexOf("\\")+1, name.length()); String path=request.getRealPath("file")+File.pathSeparatorChar+fileName; File uploadFile=new File (path); request.getSession ().setAttribute("file", uploadFile); item.write(uploadFile); response.setContentType ("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out=response.getWriter(); // out.print("<font size='2'> 上传文件为:"+name+"<br>"); // out.print("保存在服务器上 的地址为:"+path+"</font>"); } } }catch(Exception e){ e.printStackTrace(); } } response.sendRedirect("smartupload.jsp"); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值