您的位置:首页 > 编程语言 > Java开发

Spring实现文件上传

2014-11-02 20:21 197 查看
Spring在使用文件上传需要在SpringMVC-servlet.xml中配置:

<bean id="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!-- set the max upload size100MB -->

<property name="maxUploadSize">

<value>104857600</value>

</property>

<property name="maxInMemorySize">

<value>4096</value>

</property>

</bean>

我们首先实现跳转方式的文件上传

实例: *.jsp

<form action="fileUpload" method="post" enctype="multipart/form-data">

img:<input type="file" name="img" /><br/>

<input type="submit" value="上传" />

</form>

fileUploadController.java

package controller;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.multipart.MultipartHttpServletRequest;

import org.springframework.web.multipart.commons.CommonsMultipartFile;

@Controller

public class FileUploadController {

@RequestMapping("/fileUpload")

public String fileUpload(HttpServletRequest request,@RequestParam("img")
MultipartFile file) throws IOException

{

//如果在这里要实现多文件上传 ,就可以这样注解 :@RequestParam("img") List<MultipartFile> list, 那么在前端就有多个name为“img” 的file

@SuppressWarnings("deprecation")

String path=request.getRealPath("file");

InputStream is=file.getInputStream();

OutputStream os=new FileOutputStream(new File(path,file.getOriginalFilename()));

byte[] buffer=new byte[400];

int length=0;

while(-1!=(length=is.read(buffer)))

{

os.write(buffer);

System.out.println(buffer+"----------------");

}

is.close();

os.close();

return "fileOk";

}

}

2 . 使用$.ajaxFileUpload实现不跳转页面的文件上传

此时,我们需要使用jquery.js和ajaxfileupload.js两个文件

实例:

<script type="text/javascript" src="source/jquery.js"></script>

<script type="text/javascript" src="source/ajaxfileupload.js"></script>

<script type="text/javascript">

function fileUpload() {

$.ajaxFileUpload({

url:"ajaxfileUpload",

secureuri:false,

type:"POST",

fileElementId:"file",

dataType:"json",

success:function(data)

{

alert(data.result);

},

error:function()

{

alert("上传失败");

}

});

return false;

}

</script>

</head>

<body>

<form action="" method="post" enctype="multipart/form-data">

<input type="file" name="file" id="file"/><br/>

<input type="button" value="upload" onclick="return fileUpload();"/>

</form>

</body>

在这里需要注意,我们使用两个静态的外部资源文件 ,就需要在SpringMVC-Servlet.xml 中配置

<mvc:resources location="/source/*" mapping="/source/**"/>

AjaxFileUploadController.java

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

@Controller

public class AjaxFileUpload {

//@ResponseBody

@RequestMapping(value="/ajaxfileUpload")

public String fileUpload(@RequestParam("file") MultipartFile file,HttpServletRequest req,HttpServletResponse resp) throws IOException

{

System.out.println("-----------------");

System.out.println(file.getOriginalFilename());

InputStream is=null;

FileOutputStream os=null;

try {

is=file.getInputStream();

String path=req.getSession().getServletContext().getRealPath("file");

os=new FileOutputStream(new File(path,file.getOriginalFilename()));

byte[] buffer=new byte[400];

int length=0;

while(-1!=(length=is.read(buffer)))

{

os.write(buffer);

System.out.println(new String(buffer));

}

} catch (IOException e) {

e.printStackTrace();

}

is.close();

os.close();

resp.getWriter().println("{\"result\":\"fileUploadOk\"}");

return null;

// return "{\"result\":\"fileUploadOk\"}";

}

}

我们从以上两个实例看出在接受文件时,使用的时MultipartFile直接来接受,其实我们还可以使用MultipartHttpServletRequest来处理,通过将HttpServletRequest来cast to MultipartHttpServetRequest

即:HttpServletRequest request=.....

MultipartHttpServletRequest mhr=(MultipartHttpServletRequest)request;

然后使用: mhr.getFile() 获得MultipartFile

mhr.getFiles()获得List<MultipartFile>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: