@ResponseBody
@RequestMapping(value = "/uploadFile")
public String uploadFile(HttpServletRequest request, @Param("file") MultipartFile file) throws IOException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
String res = sdf.format(new Date());
//服務器上使用
String rootPath =request.getServletContext().getRealPath("/uploads/");//target的目錄
// //本地使用
// String rootPath = "/Users/liuyanzhao/Documents/uploads/";
//原始名稱
String originalFilename = file.getOriginalFilename();
//新的文件名稱
String newFileName = res + originalFilename.substring(originalFilename.lastIndexOf("."));
//創建年月文件夾
Calendar date = Calendar.getInstance();
File dateDirs = new File(date.get(Calendar.YEAR)
+ File.separator + (date.get(Calendar.MONTH) + 1));
//新文件
File newFile = new File(rootPath + File.separator + dateDirs + File.separator + newFileName);
//判斷目標文件所在的目錄是否存在
if (!newFile.getParentFile().exists()) {
//如果目標文件所在的目錄不存在,則創建父目錄
newFile.getParentFile().mkdirs();
}
System.out.println(newFile);
//將內存中的數據寫入磁盤
file.transferTo(newFile);
//完整的url
String fileUrl = "/basaltsign/uploads/" + date.get(Calendar.YEAR) + "/" + (date.get(Calendar.MONTH) + 1) + "/" + newFileName;
Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map2 = new HashMap<String, Object>();
map.put("code", 0);//0表示成功,1失敗
map.put("msg", "上傳成功");//提示消息
map.put("data", map2);
map2.put("src", fileUrl);//圖片url
map2.put("title", newFileName);//圖片名稱,這個會顯示在輸入框裏
String result = new JSONObject(map).toString();
//System.out.println("map=="+map);
return result;
後來項目修改幾個功能,偶然測試了一下上傳圖片結果發現result 返回給頁面的數據格式變樣了 不是標準的json格式了
result=={"msg":"上傳成功","code":0,"data":"{src=/basaltsign/uploads/2018/4/20180425171450856.jpg, title=20180425171450856.jpg}"}
仔細看會發現 data對應的值不是json格式的而是雙引號括起來的字符串。所以頁面是收不到值的。我很納悶 我什麼都沒改 爲什麼json格式變樣了?這讓我怎麼辦。後來我無意間將 返回的result 變成map格式。代碼如下
/**
* 富文本 上傳文件
*/
@ResponseBody
@RequestMapping(value = "/uploadFile")
public Map uploadFile(HttpServletRequest request, @Param("file") MultipartFile file) throws IOException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
String res = sdf.format(new Date());
//服務器上使用
String rootPath =request.getServletContext().getRealPath("/uploads/");//target的目錄
// //本地使用
// String rootPath = "/Users/liuyanzhao/Documents/uploads/";
//原始名稱
String originalFilename = file.getOriginalFilename();
//新的文件名稱
String newFileName = res + originalFilename.substring(originalFilename.lastIndexOf("."));
//創建年月文件夾
Calendar date = Calendar.getInstance();
File dateDirs = new File(date.get(Calendar.YEAR)
+ File.separator + (date.get(Calendar.MONTH) + 1));
//新文件
File newFile = new File(rootPath + File.separator + dateDirs + File.separator + newFileName);
//判斷目標文件所在的目錄是否存在
if (!newFile.getParentFile().exists()) {
//如果目標文件所在的目錄不存在,則創建父目錄
newFile.getParentFile().mkdirs();
}
System.out.println(newFile);
//將內存中的數據寫入磁盤
file.transferTo(newFile);
//完整的url
String fileUrl = "/basaltsign/uploads/" + date.get(Calendar.YEAR) + "/" + (date.get(Calendar.MONTH) + 1) + "/" + newFileName;
Map<String, Object> map = new HashMap<String, Object>();
Map<String, Object> map2 = new HashMap<String, Object>();
map.put("code", 0);//0表示成功,1失敗
map.put("msg", "上傳成功");//提示消息
map.put("data", map2);
map2.put("src", fileUrl);//圖片url
map2.put("title", newFileName);//圖片名稱,這個會顯示在輸入框裏
//String result = new JSONObject(map).toString();
System.out.println("map=="+map);
return map;
}
返回給頁面數據變成了這樣
map=={msg=上傳成功, code=0, data={src=/basaltsign/uploads/2018/4/20180425172004551.jpg, title=20180425172004551.jpg}}
你會發現data 的值 沒有了雙引號。
現在有個問題我就鬱悶了,之前發佈到服務器的項目是以String格式返回數據的目前是正常還能上傳圖片。現在更新的項目只能以map格式返回數據才能正常上傳。百思不得其解,有知道的大神不防告訴小弟