当前位置: 首页 > wzjs >正文

洛阳seo网站建立健全安全生产责任制和安全生产规章制度

洛阳seo网站,建立健全安全生产责任制和安全生产规章制度,四川专业网站建设推广,做的好的商城网站一、需求与整体思路支持 图片 与 音频 两种文件类型,后期可扩展任意类型。文件存储到独立 文件服务器(本文示例为 http://localhost:8085)。上传成功后返回 绝对路径 与 相对路径,前端拿到即可回显。如果用户再次上传,…

一、需求与整体思路

  • 支持 图片音频 两种文件类型,后期可扩展任意类型。

  • 文件存储到独立 文件服务器(本文示例为 http://localhost:8085)。

  • 上传成功后返回 绝对路径相对路径,前端拿到即可回显。

  • 如果用户再次上传,需要 删除旧文件,避免垃圾堆积。


二、项目依赖

除了 SSM 常规依赖,额外需要:

<!-- Jersey Client:负责向文件服务器 PUT/DELETE -->
<dependency><groupId>com.sun.jersey</groupId><artifactId>jersey-client</artifactId><version>1.19.4</version>
</dependency><!-- fastjson:返回 JSON -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version>
</dependency>

三、Controller 代码拆解

核心控制器 UploadController 提供了 3 个接口:

接口作用
POST /upload/uploadFile上传图片
POST /upload/uploadFileMp3上传 MP3
POST /upload/deleteFile删除文件(复用)

3.1 上传主流程(5 步)

// 1. 读文件字节
byte[] picfileBytes = picfile.getBytes();// 2. 生成唯一文件名
String suffix   = originalFilename.substring(originalFilename.lastIndexOf("."));
String fileName = UUID.randomUUID().toString() + suffix;// 3. 拼接服务器路径
String realPath    = "http://localhost:8085/" + fileType + "/" + fileName;
String relativePath= "/" + fileType + "/" + fileName;// 4. 删除旧文件
if(StringUtils.hasText(lastImg)){Client.create().resource(lastImg).delete();
}// 5. PUT 上传
Client.create().resource(realPath).put(picfileBytes);

说明:

  • fileTypepic / mp3,后期可拓展为 videodoc 等。

  • Jersey 的 PUT 方法直接把字节流推送到文件服务器,简单暴力。

3.2 统一返回格式

{"realPath": "http://localhost:8085/pic/3f4c5e6f.jpg","relativePath": "/pic/3f4c5e6f.jpg"
}

前端拿到 relativePath 即可拼成 <img src="http://localhost:8085/pic/3f4c5e6f.jpg">


四、SpringMVC 配置要点

  1. multipart 解析器
    spring-mvc.xml

    <bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="10485760"/> <!-- 10MB -->
    </bean>
  2. 静态资源映射(本地调试需要)
    如果文件服务器就是本机 Tomcat,确保

    <mvc:resources mapping="/pic/**"  location="/pic/" />
    <mvc:resources mapping="/mp3/**"  location="/mp3/" />

五、常见坑 & 优化

问题解决思路
中文文件名乱码CommonsMultipartResolver 已自动处理。
文件过大调大 maxUploadSize,并前端做分片。
文件服务器跨域文件服务器(如 Nginx)加 Access-Control-Allow-Methods: PUT, DELETE
删除失败 404检查 lastImg 是否为绝对路径,且文件服务器真实存在。

六、一键复用模板

前端调用示例(axios):

const form = new FormData();
form.append('fileType', 'pic');
form.append('picfile', file);
form.append('lastImg', oldImgUrl);   // 可空axios.post('/upload/uploadFile', form, {headers: { 'Content-Type': 'multipart/form-data' }
}).then(res => {console.log('绝对路径:', res.data.realPath);
});

七、小结

通过 Jersey Client + SSM,我们 30 行代码就完成了:

  • 文件上传

  • 垃圾清理

  • 统一返回

后续只需新增 fileType 即可支持任意格式

八、附源代码

package com.qcby.controller;import com.alibaba.fastjson.JSONObject;
import com.qcby.model.Album;
import com.qcby.service.AlbumService;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import org.apache.taglibs.standard.extra.spath.RelativePath;
import org.aspectj.weaver.ast.Or;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;//图片上传
@Controller
@RequestMapping("/upload")
public class UploadController {/*** fileType 图片部分路径"pic"* picfile 文件类型* multipartFile:spring提供的专门接收文件的参数*/@ResponseBody@RequestMapping("/uploadFile")public Object updatePic(String fileType,MultipartFile picfile, HttpServletResponse response, HttpServletRequest request, String lastImg) throws IOException {//1.拿到文件的名字并用随机数处理文件的名字,保证在图片服务器上名称唯一//2.获取该文件的Byte字节流//3.获取上传位置  http://localhost:8085/pic/xxx.jpg//4.利用客户端工具和图片上传工具类进行文件上传(上传到项目服务器)//5.处理出来后半段路径:/pic/xxx.jpg//1.获取上传文件的字节数组,与路径无关byte[] picfileBytes = picfile.getBytes();//2.获取上传文件的原始文件名String originalFilename = picfile.getOriginalFilename();//3.分隔出扩展名 例:jspString suffix = originalFilename.substring(originalFilename.lastIndexOf("."));//4.生成随机名字,不包括扩展名String fileName = UUID.randomUUID().toString();//5.加上后缀fileName = fileName + suffix;//6.图片服务器访问的绝对路径前一段String path = "http://localhost:8085";//7.图片服务器访问的绝对路径 http://localhost:8085/pic/xxxx.jspString realPath = path + "/" + fileType + "/" + fileName;//8.上传到数据库里面的路径  /pic/xxx.jspString relativePath = "/" + fileType + "/" + fileName;//9.创建操作文件的客户端对象,具备访问外部资源、发起网络操作的能力(为了用客户端建立网络连接和外部访问)Client client = Client.create();//判断:如果图片服务器里有上一个照片,就删除(还没添加之前)if(lastImg != null && !"".equals(lastImg)){WebResource resource = client.resource(lastImg);resource.delete();}//10.根据拼接好的完整访问路径,获取对应的网络资源对象(用于后续文件上传等操作)WebResource webResource = client.resource(realPath);//11.将文件的字节数组内容,通过客户端上传(put 操作)到指定资源路径对应的位置(将数据上传到路径)webResource.put(picfileBytes);//12.创建一个 JSON 对象,用于封装要返回的数据JSONObject jsonObject = new JSONObject();jsonObject.put("realPath",realPath);jsonObject.put("relativePath",relativePath);return jsonObject;}@ResponseBody@RequestMapping("/deleteFile")public String deleteFile(String lastImg){Client client = Client.create();//判断:如果图片服务器里有上一个照片,就删除(还没添加之前)if(lastImg != null && !"".equals(lastImg)){WebResource resource = client.resource(lastImg);resource.delete();}return "success";}/*** fileType 图片部分路径"mp3"* mp3file 文件类型* multipartFile:spring提供的专门接收文件的参数*/@RequestMapping("/uploadFileMp3")@ResponseBodypublic Object uploadMp3(String fileType,MultipartFile mp3file, HttpServletResponse response, HttpServletRequest request, String lastMp3) throws IOException {//1.拿到文件的名字并用随机数处理文件的名字,保证在图片服务器上名称唯一//2.获取该文件的Byte字节流//3.获取上传位置  http://localhost:8085/pic/xxx.jpg//4.利用客户端工具和图片上传工具类进行文件上传(上传到项目服务器)//5.处理出来后半段路径:/pic/xxx.jpg//1.获取上传文件的字节数组,与路径无关byte[] picfileBytes = mp3file.getBytes();//2.获取上传文件的原始文件名String originalFilename = mp3file.getOriginalFilename();//3.分隔出扩展名 例:jspString suffix = originalFilename.substring(originalFilename.lastIndexOf("."));//4.生成随机名字,不包括扩展名String fileName = UUID.randomUUID().toString();//5.加上后缀fileName = fileName + suffix;//6.图片服务器访问的绝对路径前一段String path = "http://localhost:8085";//7.图片服务器访问的绝对路径 http://localhost:8085/pic/xxxx.jspString realPath = path + "/" + fileType + "/" + fileName;//8.上传到数据库里面的路径  /pic/xxx.jspString relativePath = "/" + fileType + "/" + fileName;//9.创建操作文件的客户端对象,具备访问外部资源、发起网络操作的能力(为了用客户端建立网络连接和外部访问)Client client = Client.create();//判断:如果图片服务器里有上一个照片,就删除(还没添加之前)if(lastMp3 != null && !"".equals(lastMp3)){WebResource resource = client.resource(lastMp3);resource.delete();}//10.根据拼接好的完整访问路径,获取对应的网络资源对象(用于后续文件上传等操作)WebResource webResource = client.resource(realPath);//11.将文件的字节数组内容,通过客户端上传(put 操作)到指定资源路径对应的位置(将数据上传到路径)webResource.put(picfileBytes);//12.创建一个 JSON 对象,用于封装要返回的数据JSONObject jsonObject = new JSONObject();jsonObject.put("realPath",realPath);jsonObject.put("relativePath",relativePath);System.out.println(realPath);System.out.println(relativePath);return jsonObject;}}


文章转载自:

http://5iTz89Cr.wpcfm.cn
http://3Tjujlse.wpcfm.cn
http://Z6pjmZlU.wpcfm.cn
http://21lMby5B.wpcfm.cn
http://PMQ4S2M3.wpcfm.cn
http://iyfWkiJ9.wpcfm.cn
http://5MryTaYx.wpcfm.cn
http://kg2jnkiT.wpcfm.cn
http://GNtefQ5V.wpcfm.cn
http://ShAmHevl.wpcfm.cn
http://cL9tC255.wpcfm.cn
http://tqtjOOVZ.wpcfm.cn
http://ruYF99KK.wpcfm.cn
http://Wp7fxKVZ.wpcfm.cn
http://0ndBPx3g.wpcfm.cn
http://5YOtCpK9.wpcfm.cn
http://NriS7jHS.wpcfm.cn
http://dqjb5g0W.wpcfm.cn
http://xZFrsBAJ.wpcfm.cn
http://ofbwoESb.wpcfm.cn
http://FG4RaUOA.wpcfm.cn
http://gAGv93hc.wpcfm.cn
http://KbGm8ZWM.wpcfm.cn
http://n9DMiNlz.wpcfm.cn
http://rcC9tpQL.wpcfm.cn
http://G2NEIKc8.wpcfm.cn
http://XrOsOlPG.wpcfm.cn
http://6IU5Bgma.wpcfm.cn
http://c13ie9QY.wpcfm.cn
http://4etA1uW6.wpcfm.cn
http://www.dtcms.com/wzjs/653510.html

相关文章:

  • 贵溪市城乡建设局网站seo分析师
  • 应该双网站无需注册免费的网站
  • 10G网站空间百度seo是啥
  • 正规的百度快排seo扬中企业网站优化哪家好
  • 衣柜 技术支持 东莞网站建设网站开发排行
  • 廊坊做网站优化的公司网站建设的相关新闻
  • 旅游电子商务网站建设技术规范wordpress案例
  • 租用网站如何制作网页长沙谷歌seo
  • 如何用vs的c 做网站产品网站做营销推广
  • 北外新闻行业门户网站建设做设计的一般在什么网站找素材
  • 公司网站维护由那个部门做文字logo免费设计在线生成
  • 做外贸 是否需要做中文网站wordpress企业仿站视频教程
  • 四川做网站的公司北京网站制作费用
  • 网站开发用什么系统比较好?公司网站做好了还需
  • 电商网站主题wordpress admin ajax
  • 深圳网络开发手机网站搜索优化
  • 花瓣设计网站官网入口如何是wordpress
  • 网站开发无形资产重庆网站建设企业
  • 做业务需要知道哪些网站盐城市网站建设公司
  • 网站文章百度快照怎么做做网站的ui框架
  • 做ppt介绍网站动漫新闻资讯站
  • 泉州网站设计师招聘杨伟丽 郑州做网站
  • 关于建设网站的情况说明书wordpress 斜杠
  • 适合奖励自己的网站免费做分析图用的地图网站
  • 网站正在建设中页面设置建设部网站公示公告安全
  • 文山知名网站建设做百度排名推广有哪些网站
  • 北京公司建网站一般需要多少钱360搜索引擎入口
  • 青白江建设局网站江苏建设工程信息网站
  • 儿童 网站模板破解付费wordpress主题
  • 电商网站建设公司排名天元建设集团有限公司logo