圖片上傳處理
1,配置虛擬目錄
由於圖片常用的需要靜態的訪問環境,tomcat開虛擬目錄的方式做了幾次都失敗了,所以我做做了一個apache的服務,將apache的啓動路徑設置爲我存放上傳文件的位置。
這圖顯示了需要改的路徑,然後啓動apache,測試一下localhost的訪問是否可以。
2,配置解析器
!-- 文件上傳 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 設置上傳文件的最大尺寸爲5MB -->
<property name="maxUploadSize">
<value>5242880</value>
</property>
</bean>
3,使用一個上傳組件uploadfy(h5)
關於上傳組件的內容我做了一個關於uploadfy的小例子。
這個組件是在csdn上下載的,依賴不粘貼了,看一下jsp的代碼。
<form>
<input id="file_upload" name="file_upload" type="file" multiple="true">
<a style="position: relative; top: 3%;" href="javascript:$('#file_upload').uploadifive('upload')">UploadFiles</a>
<div id="queue" ></div>
<img id="result" alt="" src="">
</form>
$(function() {
$('#file_upload').uploadifive({
'auto' : false,
'queueID' : 'queue',
'uploadScript' : 'file/onefile',
'onUploadComplete' : function(file, data) {
var jsonData =JSON.parse(data);
alert(jsonData);
$('#result').attr("src",jsonData.data);
}
});
});
在html中,input代表了可選的上傳組件,在js中設置了上傳方法和回調。在看一下controller
@RequestMapping("/onefile")
@ResponseBody
public RemmoResult oneFileUpload(MultipartHttpServletRequest request, HttpServletResponse response) {
//1. build an iterator
Iterator<String> itr = request.getFileNames();
CommonsMultipartFile file=null;
//2. get each file
while(itr.hasNext()){
//2.1 get next MultipartFile
file = (CommonsMultipartFile) request.getFile(itr.next());
System.out.println(file.getOriginalFilename() +" uploaded! ");
String fileName = file.getOriginalFilename();
System.out.println("原始文件名:" + fileName);
// 新文件名
String newFileName = UUID.randomUUID() + fileName;
// 獲得項目的路徑
ServletContext sc = request.getSession().getServletContext();
// 上傳位置
// String path = sc.getRealPath("/img") + "\\"; // 設定文件保存的目錄
File f = new File(path);
if (!f.exists())
f.mkdirs();
if (!file.isEmpty()) {
try {
FileOutputStream fos = new FileOutputStream(path + newFileName);
InputStream in = file.getInputStream();
int b = 0;
while ((b = in.read()) != -1) {
fos.write(b);
}
fos.close();
in.close();
return RemmoResult.ok("http://localhost/"+newFileName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return null;
}
我們使用MultipartHttpServletRequest來接傳過來的數據,獲得數組後再循環遍歷,將這個文件寫到我們的設置的apache的路徑中,我用了一個共同的返回值,這個返回值是一個
{
"status":"0",
"msg":"",
"data":"返回數據"
}
這種類型的對象,在前端可以接到json字符串,轉成json對象後就可以直接使用了。
這裏主要就是記錄一下上傳的功能,一個具體的上傳組件,我還需要再封裝一下。初學者弄起來還是不容易啊。