最近做文件上傳費(fèi)了些功夫,記錄下使用方法。
1.依賴(lài)配置
<!--文件上傳start-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<!--文件上傳end-->
2.在springmvc.xml文件中配置文件解析器,配置文件上傳的限制。
<!-- 文件上傳 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 設(shè)置上傳文件的最大尺寸為5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
</bean>
3.配置虛擬路徑
實(shí)際項(xiàng)目中,不可能將上傳的文件和圖片保存在項(xiàng)目路徑中,這樣會(huì)導(dǎo)致項(xiàng)目崩潰。比較合理的做法是將上傳的文件和圖片存在本地的磁盤(pán)中,Tomcat中綁定一個(gè)虛擬路徑。Tomcat下conf目錄中的server.xml文件,在<Host> </Host>中添加<Context docBase="H:/data/file" path="/file"/>,這句話的意思是說(shuō)存儲(chǔ)在H:/data/file文件夾下的文件可以通過(guò)http://localhost:8080/file來(lái)訪問(wèn)。
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
<Context docBase="H:/data/file" path="/file"/>
</Host>
4.編寫(xiě)Controller
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
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 java.io.File;
import java.io.IOException;
import java.util.UUID;
/**
* Created by Tomthy on 2018/5/17
*/
/**
* 文件、圖片上傳
*/
@Controller
public class UploadFileController {
private static final Logger logger = LoggerFactory.getLogger(TestController.class);
//文件上傳相關(guān)代碼
@RequestMapping(value = "upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile fileUpload) throws IOException {
// 下面是圖片上傳的代碼
// 得到圖片的原始文件名
String originalName = fileUpload.getOriginalFilename();
// 指定帶盤(pán)符的路徑, 物理路徑
String realPath = "H://data//file//";
/**
* 為了處理出現(xiàn)重名現(xiàn)象, 將原始文件名去掉,
* 通過(guò)UUID算法生成新的文件名
*/
String uuidName = UUID.randomUUID().toString();
// uuid名稱(chēng)加上文件的后綴名
String newFile = uuidName + originalName.substring(originalName.lastIndexOf("."));
// 創(chuàng)建File文件
File file = new File(realPath + newFile);
// 將圖片寫(xiě)入到具體的位置
fileUpload.transferTo(file);
// 將文件名保存到數(shù)據(jù)庫(kù)
// items.setPic(newFile);
return "http://localhost:8080/file/"+newFile;
}
}
5.編寫(xiě)前臺(tái)頁(yè)面
以后補(bǔ)充