標籤:類型 nal ping http 根據 attribute data load text
我整理了一下,這個辦法在Servlet上應該也用得上。其實檔案上傳主要的問題是在於儲存路徑的拼接。
這裡我是把東西存在Web項目的WebContent目錄下的
下面貼一些代碼
目標應該是這樣一個格式 Workspace\ProjectName\自訂目錄\fileName
於是就有下面三段代碼
然後直接拼接起來就行了。下面我直接貼代碼吧
首先是jsp的form部分
<form action="upload" encType="multipart/form-data" method="post"> <label>選擇檔案</label> <input id="fileId" name="file" type="file"/> <input type="submit" value="提交"/> </form>
然後是Controller部分
@RequestMapping("/upload") public String uploadImg(HttpServletRequest request) throws IllegalStateException, IOException { //拼接檔案儲存體的目錄 String temp=Thread.currentThread().getContextClassLoader().getResource("").getPath(); int num=temp.indexOf(".metadata"); String path=temp.substring(1,num).replace(‘/‘, ‘\\‘)+request.getContextPath().replaceAll("/", "")+"\\WebContent\\images\\"; //上傳檔案 List<String> list = FileUtil.upLoad(request, path); request.setAttribute("path", list.get(0)); System.out.println(list.get(0)); return "uploadok"; }
最後是我在FileUtil裡封裝的一個辦法,其實我很糾結要不要單檔案、多檔案分開來。最後我使用List來返回儲存的路徑,後面可能會根據需要改
package com.yck.util;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.UUID;import javax.servlet.http.HttpServletRequest;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import org.springframework.web.multipart.commons.CommonsMultipartResolver;public class FileUtil{ public static List<String> upLoad(HttpServletRequest request,String path) { List<String> list = new ArrayList<String> (); //存放結果 //1、將當前上下文初始化給CommonMutipartResolver CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext()); //2、檢查Form中encType是否為multipart/form-data if(multipartResolver.isMultipart(request)) { //將request轉為MultipartHttpServletRequest MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; //擷取迭代器遍曆multipartRequest裡的檔案名稱 Iterator<String> iter = multipartRequest.getFileNames(); while(iter.hasNext()) { //擷取檔案並向下遍曆 MultipartFile file = multipartRequest.getFile(iter.next().toString()); if(file != null) { //擷取檔案類型,即尾碼名 String str = file.getOriginalFilename(); String suffix = str.substring(str.lastIndexOf(".")); //用 當前日期+UUID作為檔案名稱避免重名 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); String dateStr = sdf.format(new Date()).replaceAll("-", ""); String name = dateStr +UUID.randomUUID().toString().replaceAll("-", ""); //拼接檔案絕對路徑 String filePath = path + name + suffix; try { file.transferTo(new File(filePath)); } catch (IllegalStateException | IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } list.add(filePath); } } } return list; }}
最後測試結果
控制台輸出的路徑也是符合預期的
E:\ckck\EclipseOxygen\MyWeb\WebContent\images\59fd10b473d4463686e1bffeaca5c46c.jpg
基於SSM架構的檔案上傳