nginx实现图片上传+图片回显

来源:互联网 发布:指南针炒股软件好吗 编辑:程序博客网 时间:2024/06/17 06:56

之前用过一次文件上传,核心代码为:

@Controllerpublic class FileController {@RequestMapping("file.action")public String file(MultipartFile file) throws IOException{FileUtils.writeByteArrayToFile(new File("D:\\图片样例\\"+file.getOriginalFilename()), file.getBytes());return "hello";}}
后来在项目中联合nginx进行文件上传(主要是用来上传图片的),现在记录一下

1.在springmvc配置文件中配置文件上传解析器

        <bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设定默认编码 --><property name="defaultEncoding" value="UTF-8"></property><!-- 设定文件上传的最大值10MB,10*1024*1024 --><property name="maxUploadSize" value="10485760"></property></bean>
2.js中的请求

kingEditorParams : {filePostName  : "uploadFile",uploadJson : '/pic/upload',dir : "image"}
3.编辑Controller
package com.jt.manage.controller;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;import javax.imageio.ImageIO;import org.apache.log4j.Logger;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import com.jt.common.vo.PicUploadResult;@Controllerpublic class FileUploadController {public static final Logger logger = Logger.getLogger(PicUploadResult.class);/** * 文件上传的步骤 * 1.采用文件正确的接收方式接收(修改3处配置文件、接口类型等) * 2.判断是否为一个图片,0表示无异常,1表示异常(jpg|gif|png) * 3.判断是否一个“正经”的图片,判断是否有width和height * 4.编辑磁盘目录D:/jt-upload/images/yyyy/MM/dd/HH/mm/文件名称 * 5.编辑相对路径url:image.jt.com/images/yyyy/MM/dd/HH/mm/文件名称 * 6.将文件保存 * https://img14.360buyimg.com/n1/s546x546_jfs/t4957/89/73465466/141719/2e72323d/58da27a5N6a74cd4c.jpg * https://img14.360buyimg.com/n0/jfs/t5701/135/3550974634/316038/775a27ed/593e4e81Nc12ab927.jpg */@RequestMapping("/pic/upload")@ResponseBodypublic PicUploadResult fileUpload(MultipartFile uploadFile) {PicUploadResult picUpload = new PicUploadResult();//获取文件名/** * MultipartFile类中两个方法区别:     *getName : 获取表单中文件组件的名字 *getOriginalFilename : 获取上传文件的原名 */String fileName = uploadFile.getOriginalFilename();//获取文件后缀String endName = fileName.substring(fileName.lastIndexOf("."));//判断是否为一个图片if(!endName.matches("^\\.(jpg|png|gif)$")) {logger.error("******************该文件不是一个图片!");picUpload.setError(1);return picUpload;}try {BufferedImage bufferedImage = ImageIO.read(uploadFile.getInputStream());int width = bufferedImage.getWidth();int height = bufferedImage.getHeight();picUpload.setWidth(width+"");picUpload.setHeight(height+"");String localPath = "D:/jt-upload/images/";String filePath = new SimpleDateFormat("yyyy/MM/dd/HH/mm").format(new Date())+"/";String urlPath = "http://image.jt.com/images/";localPath += filePath+fileName;urlPath += filePath+fileName;File file = new File(localPath);if(!file.exists())  file.mkdirs();uploadFile.transferTo(file);picUpload.setUrl(urlPath);//给浏览器看的,此路径为回显图片的路径logger.info("***************文件上传成功!"+localPath);//运行速度远高于system.out.print();} catch (IOException e) {e.printStackTrace();logger.error("*****************该文件是一个非法文件");picUpload.setError(1);return picUpload;}return picUpload;}}
4.配置nginx.conf(没有此配置,浏览器访问的路径不能转到本地,上传成功后不能回显图片)

#配置多台Tomcat服务器,默认采用轮询的方式,配置权重(此处未配置权重)upstream  jt{server  127.0.0.1:8091 ;server  127.0.0.1:8092 ;server  127.0.0.1:8093 ;}#配置图片服务器server {listen       80;server_name  image.jt.com;#防止host请求头丢失proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {root     D:\\jt-upload;}}server {listen       80;server_name  manager.jt.com;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;location / {#反向代理服务器proxy_pass    http://jt;}}
5.配置host文件,让server_name中的配置生效

127.0.0.1       image.jt.com127.0.0.1       manager.jt.com






原创粉丝点击