1. 程式人生 > >檔案上傳--基於Spring MVC框架+SmartUpload

檔案上傳--基於Spring MVC框架+SmartUpload

這篇文章是介紹檔案上傳的,由於在spring MVC上實現起來和直接在servlet中寫有些不同,所以特地寫了一下這篇文章,關於不同點,大家可以先閱讀一下上一篇文章。好了,下面直接上程式碼。

jab包是jspSmartUpload.jar,如果有類似的jar包如:commons-fileupload-1.2.2,留一個即可,否則會衝突報錯

首先是一個簡單的頁面(jsp),比較醜,但能用:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="pragma" content="no-cache" />
<base target="_self">
<title>檔案上傳</title>
</head>
<body>
	<h5>檔案上傳</h5><hr/>
	<form id="uploadForm" action="http://localhost:8080/springMVC/fileLoad/upload.do" enctype="multipart/form-data" method="post">
		<div><input type="file" size="25" maxlength="80" name="file_upload"/></div>
		<div><input type="submit" value="上傳"/></div>
	</form>
</body>
</html>
效果圖:


然後是controller程式碼,至於為什麼這樣寫,可以參考上一篇文章:

package module.system.controller;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import module.system.common.FileLoad;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.ServletConfigAware;
import org.springframework.web.context.ServletContextAware;
/**
 * 檔案上傳下載.
 * 
 */
@Controller
@RequestMapping("/fileLoad")
public class FileLoadController implements ServletConfigAware,ServletContextAware{
	
	private ServletContext servletContext;
	@Override
	public void setServletContext(ServletContext arg0) {
		this.servletContext = arg0;
	}
    private ServletConfig servletConfig;
	@Override
	public void setServletConfig(ServletConfig arg0) {
        this.servletConfig = arg0;
	}
	
	@RequestMapping(value = "/upload.do", method = RequestMethod.POST)
	@ResponseBody  //此註解表明返回值跳過檢視處理部分,直接寫入 http response body中
	public String upload(HttpServletRequest request,HttpServletResponse response) {
		 
		FileLoad fileLoad = new FileLoad();
		try {
			fileLoad.upload(request, response,servletConfig);
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return "";
	}

	
}
接著是FileLoad類:
package module.system.common;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jspsmart.upload.SmartFile;
import com.jspsmart.upload.SmartUpload;


/**
 * 檔案上傳下載.
 * @author nagsh.
 *
 */
public class FileLoad{

	/**
	 * 檔案上傳.
	 * @param request
	 * @param response
	 * @return
	 * @throws ServletException
	 * @throws IOException
	 */
	public String upload(HttpServletRequest request, HttpServletResponse response,ServletConfig config) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		//新建一個SmartUpload物件
		SmartUpload mySmartUpload=new SmartUpload();
		String fileId = "";
		try{
			//上傳初始化
			mySmartUpload.initialize(config, request, response);
			//設定每個上傳檔案的最大長度
			mySmartUpload.setMaxFileSize(1*512*1024);
			//設定總上傳資料的長度
			mySmartUpload.setTotalMaxFileSize(1*1024*1024);
			//設定允許上傳的檔案的型別,只允許上傳java,doc,txt檔案
			mySmartUpload.setAllowedFilesList("java,doc,txt");
			//設定禁止上傳的檔案的型別,禁止上傳帶有exe,bat檔案
			mySmartUpload.setDeniedFilesList("exe,bat");
			//上傳檔案
			mySmartUpload.upload();
			
			//處理每個上傳檔案
			for(int i=0;i<mySmartUpload.getFiles().getCount();i++)
			{
				SmartFile file=mySmartUpload.getFiles().getFile(i);
				//判斷使用者是否選擇了檔案
				if(!file.isMissing()){
					//另存到以Web應用程式的根目錄為檔案根目錄的目錄下
					//(宣告一下:在Myeclipse中,該目錄位於工程下的.metadata/.me_tcat/webapps/該工程目錄/upload/)
					//生成唯一的檔案索引(日期+兩個隨機數)
					String fileName =file.getFileName();
                    String data[] = fileName.split("\\.");
                    System.out.println(data.length);
                    String fileType = data[1];   //檔案型別
                    System.out.println(fileType);
					Date now = new Date();
					DateFormat YMD = new SimpleDateFormat("yyyyMMdd");//年-月-日
					String ymd = YMD.format(now);//當前年-月-日
					Random random = new Random();
					int r1 = random.nextInt(99999);
					int r2 = random.nextInt(99999);
					fileId = ymd+r1+""+r2;
					System.out.println(fileId);
					file.saveAs("/upload/"+fileId+"."+fileType,mySmartUpload.SAVE_VIRTUAL);
				}
			}
		}catch(Exception e){//異常處理
			//列印自定義異常資訊
		}
		return fileId;
	}
	
	
	
	public static void main(String[] args) {
		

	}

}
測試時寫一個按鈕,點選後彈出上面那個頁面就行。

檔案上傳後的名字是隨機生成的,這塊可以根據實際情況改,程式碼中寫明白了。

還要強調的是我寫的這個例子檔案是上傳到tomcat/webapps/專案/upload下,所以需要先在tomcat下建立一個資料夾。


相關推薦

檔案--基於Spring MVC框架+SmartUpload

這篇文章是介紹檔案上傳的,由於在spring MVC上實現起來和直接在servlet中寫有些不同,所以特地寫了一下這篇文章,關於不同點,大家可以先閱讀一下上一篇文章。好了,下面直接上程式碼。 jab包是jspSmartUpload.jar,如果有類似的jar包如:commo

檔案和下載(三)--【SmartUpload

一、簡介 SmartUpload一種java上傳元件包,可以輕鬆的實現檔案的上傳及下載功能。 使用該元件可以輕鬆的實現上傳檔案的限制,也可以輕易的取得檔案上傳的名稱、字尾、大小等。 三、具體實現例子【jsp+SmartUpload】 專案目錄 web.xml配置

struts2檔案修改為cos框架處理一系列事情

前段時間Struts2出來一個編號CVE-2017-5638的漏洞,影響系統及版本:Struts 2.3.5 - Struts 2.3.31、Struts 2.5 - Struts 2.5.10! 專案經理簡單修復了一下,他直接在配置檔案中新增了這麼個屬性! 屬性如下:

基於Spring MVC框架的Http流程分析

一、問題提出 我們可以方便的利用Spring MVC進行業務開發,請求的大部分工作都被框架和容器封裝,使得我們只需要做很少量的

轉:關於我使用spring mvc框架檔案時遇到的問題

昨天嘗試著用spring mvc框架做檔案上傳,犯了挺多不該犯的毛病 問題1: org.springframework.web.util.NestedServletException: Request processing failed; nested exception

Spring MVC框架下利用Servlet3.0 API實現檔案

Servlet3.0提供了對檔案上傳的原生支援,不需藉助任何第三方元件,直接使用Servlet3.0提供的API就能夠實現檔案上傳功能。本文使用IDEA IDE工具,在Spring MVC框架下,基於註解對映和資料繫結編寫Java業務程式碼,利用Servlet3

Spring MVC實現MultipartFile檔案功能

前端 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>修改資訊</title> </head> <body

Spring MVC(四)檔案

檔案上傳步驟   1.寫一個檔案上傳的頁面   2.寫一個檔案上傳的控制器 注意:   1.method="post"   2.enctype="multipart/form-data"   3.檔案型別上傳元件 type="file"   4.接收檔案引數需要使用MultipartFile 型別的引數

Spring mvc uploadifive 檔案實踐(轉自 https //segmentfault com/a/

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Java-Spring框架實現簡單的檔案(圖片為例)

一、開發環境搭建 下載相應的jar包: 1.commons-fileupload    2.commons-io web.xml 檔案配置: <servlet>       &

Java架構-Spring mvc+oss儲存+fileupload多檔案實現SSO單點登入模板管理

之前給大家介紹了sso的相關知識點和整合方案,考慮到每個系統所屬行業的不同,這邊針對於不同行業做了一些統一的sso單點登入介面模板,使用fileupload多檔案上傳+OSS阿里雲端儲存方案。 1. 阿里雲oss儲存Utils Java程式碼 2. 阿里雲配

Spring MVC檔案和下載

檔案上傳 檔案上傳需將表格的提交方式設為"POST",並且將enctype設為"multipart/form-data",以二進位制的方式提交資料。 spring mvc中可通過MultipartResolver監聽每個請求,如有上傳的檔案,則把請求封裝為MultipartH

Spring MVC 檔案工具類

public class UploadFiles { /** * 檔案的名稱 */ private String name; /** * 檔案的新的名稱 */ private String uuidname; /**

Spring MVC實現多檔案

1、修改POJO和DAO實現類  public class User{ //......其他屬性省略 private String idPicPath;//證件照路徑 private String workPicPath;//工作證照片路徑

spring mvc檔案操作

第一步:在springmvc中配置multipart型別解析器 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver

Spring MVC檔案和下載

“君看一葉舟,出沒風波里” 使用Spring MVC 進行檔案的上傳和下載,除了Spring MVC 的jar包之外,還需用到commons-fileupload-1.2.2.jar、commons-io-2.1.jar兩個包。這裡已給出下載地址:jar包下載地

spring mvc 實現檔案

html內容:<input type="file" multiple="multiple" id="file_upload" name="file_upload" /> 其中 multiple表示支援多檔案上傳<button id='upload'>上

spring mvc 檔案並攜帶其他引數

這是主要使用到的jar 檔案是:spring mvc +apache common-fileuplad  第一步:web.xml 檔案。【重點是spring mvc的攔截器和相關監聽器】 <?xml version="1.0" encoding="UTF-8"?&g

基於tobato的fastdfs與spring boot整合實現檔案和下載

專案結構: pom.xml檔案新增配置: <!-- fastdfs --> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastd