Spring上传/下载
废话不多说,直接贴代码,其中依赖mhdt-common.jar可自行下载或引用。
后台 xxxController.java:
package online.sanen.website.common.controller;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
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;
import com.mhdt.net.RequestResult;
import com.mhdt.net.RequestResult.Status;
import com.mhdt.toolkit.DateUtility;
import com.mhdt.toolkit.FileUtility;
import com.mhdt.toolkit.PathUtil;
import online.sanen.website.common.model.Resource;
import online.sanen.website.common.service.ResourceService;
import online.sanen.website.common.util.ResponseUtil;
@Controller
@RequestMapping("resource")
public class ResourceController {
static {
File file = new File(PathUtil.underCurrentProject() + "/resource");
if(!file.exists())
FileUtility.createFloder(file);
}
@Autowired
ResourceService service;
@RequestMapping("upload")
@ResponseBody
public RequestResult fileUpload(@RequestParam("pic")MultipartFile file, HttpServletRequest request) {
Resource resource = new Resource();
resource.setName(file.getOriginalFilename().split("\\.")[0]);
resource.setSuffix(file.getOriginalFilename().split("\\.")[1]);
resource.setTime(DateUtility.getNow());
try {
File f = new File(PathUtil.underCurrentProject() + "/resource/" + file.getOriginalFilename());
System.out.println(f.getAbsolutePath());
file.transferTo(f);
service.insert(resource);
String projectPath = "http://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
return RequestResult.status(Status.SUCCESS).message("上传成功!").putAttribute("url", projectPath+"/resource/download?filename="+file.getOriginalFilename());
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
return RequestResult.status(Status.SUCCESS).message("上传失败:"+e.getMessage());
}
}
@RequestMapping("download")
public void fileDownload(HttpServletResponse response, String filename) {
File file = new File(PathUtil.underCurrentProject()+"/resource/" + filename);
System.out.println(file.getAbsolutePath());
if (!file.exists() && !file.isFile())return;
response.setContentType("application/octet-stream;charset=UTF-8");
ResponseUtil.setDownloadHead(response, file);
try {
ResponseUtil.transfer(response, file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ReponseUtil.java
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletResponse;
import com.mhdt.toolkit.DateUtility;
import com.mhdt.toolkit.FileUtility;
public class ResponseUtil {
public static void validatePath(String path) {
File file = new File(path);
if(!file.exists())
FileUtility.createFloder(file);
}
public static void setDownloadHead(HttpServletResponse response,File file) {
try {
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
} catch (UnsupportedEncodingException e1) {
response.setHeader("Content-Disposition", "attachment; filename=" + file.getName());
}
response.setContentLengthLong(file.length());
}
public static void transfer(HttpServletResponse response,File file) {
byte[] buff = new byte[1024];
BufferedInputStream bis = null;
OutputStream os = null;
try {
os = response.getOutputStream();
bis = new BufferedInputStream(new FileInputStream(file));
int i = bis.read(buff);
while (i != -1) {
os.write(buff, 0, buff.length);
os.flush();
i = bis.read(buff);
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Exception->"+e.getMessage()+"->"+DateUtility.getNow());
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
spring配置(解决中文乱码)
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600" />
<property name="maxInMemorySize" value="104857600" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
前台JS (以作参考)
这里用的 jquery+jquery.form 其它方案无视
<script src="/assets/js/jquery.form.js"></script>
function uploadPic(){
var options = {
url: "${ctx}/resource/upload",
type: "post",
dataType: "json",
contentType: "application/x-www-form-urlencoded; charset=utf-8",
success: function(result) {
var status = result.status;
var data = result.data;
alert(data.url);
}
};
$("#imgForm").ajaxSubmit(options);
}