ssm项目上传图片

把图片的路径名作为varchar型保存到数据库中。显示的时候就到数据库中查找路径名,处理后赋值给<img>的src属性

然后是同过IO流把图片作为文件保存到服务器upload文件夹,具体实现:

1.添加对应的jar包

2.Controller页面

@RequestMapping(value="/add",method=RequestMethod.POST)
@ResponseBody
public Map<String, Object> doAdd(HttpServletRequest request,@RequestParam("pic") MultipartFile multipartFile,reimb reimb){
Map<String, Object> map = new HashMap<String, Object>();
//处理上传文件
String oldFileName = multipartFile.getOriginalFilename();
//文件后缀
String suffix = oldFileName.substring(oldFileName.lastIndexOf("."));
//获取文件提交路径(服务器)
//request.getServletContext() --> application
String uploadPath = request.getServletContext().getRealPath("/upload");
//文件重命名
//时间(毫秒数)+随机数+_blog+suffix
//1970-1-1~今天   System.currentTimeMillis();
String newFileName = System.currentTimeMillis()+new Random().nextInt(1000000)+"_blog"+suffix;
//上传文件 java.io.File
File targetFile = new File(uploadPath,newFileName);
try {
multipartFile.transferTo(targetFile);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
reimb.setMypic(newFileName);
reimbdao.insert(reimb);
map.put("result", true);
return map;
}


3.spring-mvc页面

     

 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="500000"></property>
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
 </bean>


4.add.jsp页面

    

<div class="form-group">
    <label for="pic" class="col-sm-2 control-label">报销单据:</label>
    <div class="col-sm-10">
      <input type="file" name="pic" class="form-control" id="pic" placeholder="上传图片">
    </div>
  </div>
 <button type="button" class="btn btn-primary" onclick="submitForm()">保存</button>

<!--表单提交js方法-->

function submitForm(){
var $form = $modal.find('form');
var action = $form.attr('action');
//文件上传提交表单需要如下代码
//FormData html5新添加的属性 ,可以支持文件上传
//FormData 在ie8中不支持,  jquery.form.js
//new FormData(dom)
//jquery-->dom  $form.get(0);  $form[0]
//dom-->jquery  $(dom)
var form = new FormData($form.get(0));
$.ajax({
url:action,
type:'post',
data:form,
async: false,
                cache: false,
               contentType: false,
                processData: false,
success:function(data){
$modal.modal('hide');
swal("添加成功!", "看去看看吧", "success");
bootTable.bootstrapTable('refresh');
}
});
}


### 解决SSM项目图片上传后在IDEA重新打包之后不显示的问题 当处理SSM(Spring, Spring MVC, MyBatis)项目中的图片上传功能时,如果遇到图片上传成功但在IDEA重新打包部署后无法正常显示的情况,通常是因为文件路径设置不当或资源未被正确加载。 #### 文件存储位置调整 为了确保图片能够稳定显示,建议将上传图片保存到项目的`resources/static`目录下。这样可以保证静态资源能通过Web服务器访问[^1]。 ```java // Java代码片段用于指定上传文件的目标路径 String filePath = request.getServletContext().getRealPath("/WEB-INF/upload/"); File fileDir = new File(filePath); if (!fileDir.exists()) { fileDir.mkdirs(); } ``` #### 修改web.xml配置 确认`web.xml`中有正确的Servlet映射来支持静态资源请求: ```xml <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/static/*</url-pattern> </servlet-mapping> ``` #### 更新pom.xml排除不必要的过滤规则 有时Maven构建过程中会因为某些默认的资源过滤规则而忽略掉部分文件夹内的内容。检查并更新`pom.xml`以防止这种情况发生: ```xml <build> <resources> <!-- 添加这一项 --> <resource> <directory>${basedir}/src/main/webapp/WEB-INF/upload</directory> <includes> <include>*</include> </includes> </resource> </resources> </build> ``` #### 调整Tomcat配置 对于使用内置Tomcat作为应用容器的情况下,需注意其工作目录(`work`)下的缓存清理机制可能会覆盖自定义放置于特定路径下的文件。因此推荐采用外部化的方式管理这些临时性的媒体资料,即不在工程内部直接操作而是指向一个绝对物理地址来进行读写操作[^2]. #### 数据库记录相对URL而非绝对路径 考虑到不同环境间迁移的需求以及跨平台兼容性等因素,在数据库表设计上应仅储存相对于站点根目录而言的链接字符串而不是完整的磁盘路径[^3]. 例如:假设网站域名为example.com,则只需保存 `/images/photo.jpg`, 不要保存 `C:\project\upload\photo.jpg`.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值