文件上传的配置
1. 配置Springmvc
<!--有关于文件上传的组件配置-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="50240000"></property>
</bean>
2. 在core中创建sys.properties属性文件
filePath=http://localhost:8084/ecps-file
3. 创建属性文件读取工具类
package com.qcby.utils;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class PropReader {public static String read(String key){String result = null;Properties prop = new Properties();InputStream stream = PropReader.class.getClassLoader().getResourceAsStream("sys.properties");try {prop.load(stream);result = prop.getProperty(key);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return result;}
}
4.复制一份tomcat作为文件服务器
注意要在bin路径的上一层
5.修改apache-tomcat-8.5.57-file 的web.xml,让其变成非只读(注意解压多层的情况
<servlet><servlet-name>default</servlet-name><servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class><init-param><param-name>debug</param-name><param-value>0</param-value></init-param><init-param><param-name>readonly</param-name><param-value>false</param-value></init-param><init-param><param-name>listings</param-name><param-value>false</param-value></init-param><load-on-startup>1</load-on-startup></servlet>
6.创建文件上传的Controller
package com.qcby.controller;import com.alibaba.fastjson.JSONObject;import com.sun.jersey.api.client.Client;import com.sun.jersey.api.client.WebResource;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.UUID;import org.slf4j.Logger;import org.slf4j.LoggerFactory;
@Controller
@RequestMapping("/upload")
public class UploadController {private static final Logger logger = LoggerFactory.getLogger(UploadController.class);/*** 图片上传的具体方法* @param request* @param response* @param picfile* @param fileType* @param lastImg* @throws IOException*/@RequestMapping("/uploadFile")public void uploadFile(HttpServletRequest request, HttpServletResponse response, MultipartFile picfile, String fileType, String lastImg,String update) throws IOException {// 后续现有代码逻辑// 1.获取前端传递过来的所有有关于文件上传的参数// MultipartHttpServletRequest mr=(MultipartHttpServletRequest) request;//2.获取存储文件的相关内容// Map<String,MultipartFile> fileMap=mr.getFileMap();//3.获取文件
// MultipartFile file=fileMap.get("picfile");//4.获取该文件的字节数组 方便上传byte[] bytes=picfile.getBytes();//5.获取文件名称String originalFilename=picfile.getOriginalFilename();//vhjbh.jpg//6.获取文件名的后缀 产生新的名字 .jpg(.exe)String suffix=originalFilename.substring(originalFilename.lastIndexOf("."));//7.定义一个新的名字 abscjsdc.jpgString fileName= UUID.randomUUID().toString();fileName=fileName+suffix;//8.上传 获取文件的上传位置 图片服务器的位置 http://localhost:8085 /pic/05.jpgString filePath="http://localhost:8084";//绝对路径 http://localhost:8085/pic/05.jpgString realPath=filePath+"/"+fileType+"/"+fileName;//相对路径 /pic/05.jpgString relativePath="/"+fileType+"/"+fileName;//9.jersy客户端进行上传Client client= Client.create();//判断if(update.equals("false")){if(lastImg!=null&&!"".equals(lastImg)){WebResource resource=client.resource(lastImg);resource.delete();}}//10.获取web资源WebResource resource=client.resource(realPath);//11.上传resource.put(bytes);//返回前端进行页面渲染JSONObject jo=new JSONObject();jo.put("realPath",realPath);jo.put("relativePath",relativePath);//响应对象的原始方式返回response.getWriter().write(jo.toString());}/*** 上传mp3文件的具体方法* @param response* @param mp3file* @param fileType* @param lastMp3* @param update* @throws IOException*/@RequestMapping("/uploadFileMp3")public void uploadFileMp3(HttpServletResponse response, MultipartFile mp3file, String fileType, String lastMp3,String update) throws IOException {// 后续现有代码逻辑
// 1.获取前端传递过来的所有有关于文件上传的参数
// MultipartHttpServletRequest mr=(MultipartHttpServletRequest) request;//2.获取存储文件的相关内容
// Map<String,MultipartFile> fileMap=mr.getFileMap();//3.获取文件
// MultipartFile file=fileMap.get("picfile");//4.获取该文件的字节数组 方便上传byte[] bytes=mp3file.getBytes();//5.获取文件名称String originalFilename=mp3file.getOriginalFilename();//vhjbh.jpg//6.获取文件名的后缀 产生新的名字 .jpg(.exe)String suffix=originalFilename.substring(originalFilename.lastIndexOf("."));//7.定义一个新的名字 abscjsdc.jpgString fileName= UUID.randomUUID().toString();fileName=fileName+suffix;//8.上传 获取文件的上传位置 图片服务器的位置 http://localhost:8085 /pic/05.jpgString filePath="http://localhost:8084";System.out.println(fileName);//绝对路径 http://localhost:8085/pic/05.jpgString realPath=filePath+"/"+fileType+"/"+fileName;//相对路径 /pic/05.jpgString relativePath="/"+fileType+"/"+fileName;System.out.println(relativePath);//9.jersy客户端进行上传Client client= Client.create();//判断if(update.equals("false")){if(lastMp3!=null&&!"".equals(lastMp3)){WebResource resource=client.resource(lastMp3);resource.delete();}}//10.获取web资源WebResource resource1=client.resource(realPath);//11.上传resource1.put(bytes);//返回前端进行页面渲染JSONObject jo=new JSONObject();jo.put("realPath",realPath);jo.put("relativePath",relativePath);//响应对象的原始方式返回response.getWriter().write(jo.toString());}/*** 删除服务器上文件的具体方法* @param filePath* @param response* @throws IOException*/@RequestMapping("/deleteFile")public void deleteFile(String filePath,HttpServletResponse response) throws IOException{Client client=Client.create();WebResource resource=client.resource(filePath);resource.delete();//返回响应response.getWriter().write("File deleted successfully");}}
7.前端ajax的调用和返回
function submitFile(){var lastImg=$("#lastImg").val();alert("添加 "+lastImg);$("#location").val($("#i-file").val());$("#addAlbumForm").ajaxSubmit({url:"/upload/uploadFile",data:{fileType:"pic",update:"false"},dataType:"json",success:function (json) {uploadedImagePath=json.realPath;$("#albumImg").attr("src",json.realPath);$("#lastImg").val(json.realPath);$("#pic").val(json.relativePath);}})
}
在文件服务器hami_file中,要在加载pic图片文件和mp3音频文件,加载到服务器当中
这样才能使图片在访问服务器时,呈现出来