MultipartFile上傳圖片儲存伺服器
選擇了圖片後在旁邊顯示
程式碼
<form class="form-horizontal" th:action="@{/faceRecognit/save}" method="post" enctype="multipart/form-data">
<div class="fileupload fileupload-new" data-provides="fileupload">
<div style=" float:left; ">
<span class="btn btn-theme02 btn-file">
<span class="btn btn-success">選擇圖片</span>
<input class="default" name="pic" multiple="multiple" type="file" data-show-caption="true"/>
</span>
</div>
<div class="fileupload-new thumbnail" style="float:left; width: 400px; height: 150px;">
<img th:src="${faceRecognitInfo==null}?@{/img/NOimage.png}:@{${faceRecognitInfo.image}}" alt="圖片載入失敗..." />
</div>
<div class="fileupload-preview fileupload-exists thumbnail" style="max-width: 400px; max-height: 150px; line-height: 20px;"></div>
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
重點是要引入這個js,這個封裝好了,相應的div的class不要刪掉,不然選擇圖片後是沒辦法顯示在旁邊的,如果不需要顯示旁邊,你可以不引入也能儲存。
<script src="/vendor/bootstrap-fileupload/bootstrap-fileupload.js"></script>
/* ===========================================================
* bootstrap-fileupload.js j2
* http://jasny.github.com/bootstrap/javascript.html#fileupload
* ===========================================================
* Copyright 2012 Jasny BV, Netherlands.
*
* Licensed under the Apache License, Version 2.0 (the "License")
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function ($) {
"use strict"; // jshint ;_
/* FILEUPLOAD PUBLIC CLASS DEFINITION
* ================================= */
var Fileupload = function (element, options) {
this.$element = $(element)
this.type = this.$element.data('uploadtype') || (this.$element.find('.thumbnail').length > 0 ? "image" : "file")
this.$input = this.$element.find(':file')
if (this.$input.length === 0) return
this.name = this.$input.attr('name') || options.name
this.$hidden = this.$element.find('input[type=hidden][name="'+this.name+'"]')
if (this.$hidden.length === 0) {
this.$hidden = $('<input type="hidden" />')
this.$element.prepend(this.$hidden)
}
this.$preview = this.$element.find('.fileupload-preview')
var height = this.$preview.css('height')
if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)
this.original = {
'exists': this.$element.hasClass('fileupload-exists'),
'preview': this.$preview.html(),
'hiddenVal': this.$hidden.val()
}
this.$remove = this.$element.find('[data-dismiss="fileupload"]')
this.$element.find('[data-trigger="fileupload"]').on('click.fileupload', $.proxy(this.trigger, this))
this.listen()
}
Fileupload.prototype = {
listen: function() {
this.$input.on('change.fileupload', $.proxy(this.change, this))
$(this.$input[0].form).on('reset.fileupload', $.proxy(this.reset, this))
if (this.$remove) this.$remove.on('click.fileupload', $.proxy(this.clear, this))
},
change: function(e, invoked) {
var file = e.target.files !== undefined ? e.target.files[0] : (e.target.value ? { name: e.target.value.replace(/^.+\\/, '') } : null)
if (invoked === 'clear') return
if (!file) {
this.clear()
return
}
this.$hidden.val('')
this.$hidden.attr('name', '')
this.$input.attr('name', this.name)
if (this.type === "image" && this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match('image.*') : file.name.match('\\.(gif|png|jpe?g)$')) && typeof FileReader !== "undefined") {
var reader = new FileReader()
var preview = this.$preview
var element = this.$element
reader.onload = function(e) {
preview.html('<img src="' + e.target.result + '" ' + (preview.css('max-height') != 'none' ? 'style="max-height: ' + preview.css('max-height') + ';"' : '') + ' />')
element.addClass('fileupload-exists').removeClass('fileupload-new')
}
reader.readAsDataURL(file)
} else {
this.$preview.text(file.name)
this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
}
},
clear: function(e) {
this.$hidden.val('')
this.$hidden.attr('name', this.name)
this.$input.attr('name', '')
//ie8+ doesn't support changing the value of input with type=file so clone instead
if($.browser.msie){
var inputClone = this.$input.clone(true);
this.$input.after(inputClone);
this.$input.remove();
this.$input = inputClone;
}else{
this.$input.val('')
}
this.$preview.html('')
this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
if (e) {
this.$input.trigger('change', [ 'clear' ])
e.preventDefault()
}
},
reset: function(e) {
this.clear()
this.$hidden.val(this.original.hiddenVal)
this.$preview.html(this.original.preview)
if (this.original.exists) this.$element.addClass('fileupload-exists').removeClass('fileupload-new')
else this.$element.addClass('fileupload-new').removeClass('fileupload-exists')
},
trigger: function(e) {
this.$input.trigger('click')
e.preventDefault()
}
}
/* FILEUPLOAD PLUGIN DEFINITION
* =========================== */
$.fn.fileupload = function (options) {
return this.each(function () {
var $this = $(this)
, data = $this.data('fileupload')
if (!data) $this.data('fileupload', (data = new Fileupload(this, options)))
if (typeof options == 'string') data[options]()
})
}
$.fn.fileupload.Constructor = Fileupload
/* FILEUPLOAD DATA-API
* ================== */
$(function () {
$('body').on('click.fileupload.data-api', '[data-provides="fileupload"]', function (e) {
var $this = $(this)
if ($this.data('fileupload')) return
$this.fileupload($this.data())
var $target = $(e.target).is('[data-dismiss=fileupload],[data-trigger=fileupload]') ?
$(e.target) : $(e.target).parents('[data-dismiss=fileupload],[data-trigger=fileupload]').first()
if ($target.length > 0) {
$target.trigger('click.fileupload')
e.preventDefault()
}
})
})
}(window.jQuery);
後臺
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ClassUtils;
import org.springframework.web.multipart.MultipartFile;
public class PhotoUtil {
private static Logger logger = LoggerFactory.getLogger(PhotoUtil.class);
/**
* @Title:
* @Description: 儲存圖片
* @param dataString時間戳
* @param staticPath靜態資源路徑
* @return
* @throws
*/
public static String savePhoto(MultipartFile multipartFile, Long dataString, String staticPath) {
// 獲取專案的地址,這個路徑首先要你在伺服器那邊建好
String realPath = ClassUtils.getDefaultClassLoader().getResource("static").getPath() + staticPath;
//為了不重複,時間戳作為圖片名稱
String fileNameString = dataString + ".jpg";
File savedFile = new File(realPath, fileNameString);
logger.info("儲存圖片--------->" + savedFile.getPath());
try {
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), savedFile);
} catch (IOException e) {
e.printStackTrace();
}
return staticPath + fileNameString;
}
}
/**
* @Title:
* @Description: 儲存註冊資訊
* @param
* @return
* @throws
*/
@PostMapping(value = "/save")
public String addCustomerInfo(@RequestParam("pic") MultipartFile files, FaceRecognitInfo faceRecognitInfo,
HttpSession session) throws Exception {
Date createTime = GetDateUtil.getDateTime2();
Date date = (Date) GetDateUtil.parseDate2(GetDateUtil.getDateTime(createTime));
faceRecognitInfo.setCreateTime(createTime);
faceRecognitInfo.setDate(date);
if (files != null) {
long time = createTime.getTime();
if (files != null && !files.isEmpty()) {
MultipartFile multipartFile = files;
//儲存圖片並返回圖片的路徑
String outname = PhotoUtil.savePhoto(multipartFile, time, "/img/customerpic/");
//路徑儲存到資料庫
faceRecognitInfo.setImage(outname);
}
}
faceRecognitMapper.save(faceRecognitInfo);
return "redirect:/faceRecognit/show";
}
資料庫中儲存的地址
這時候就儲存完了,下面是返回頁面顯示了,我的html頁面是faceRecognitList.html
@GetMapping("/show")
public String customerList(Model model, @RequestParam(value = "pageIndex", defaultValue = "1") Integer pageIndex,
@RequestParam(value = "keyname", required = false) String keyname) {
List<FaceRecognitInfo> faceRecognitlist = new ArrayList<>();
PageHelper.startPage(pageIndex, 10);
if (!StringUtils.isEmpty(keyname)) {
faceRecognitlist = faceRecognitMapper.getByLikeName(keyname);
} else {
faceRecognitlist = faceRecognitMapper.getAll();
}
System.out.println(faceRecognitlist.toString());
model.addAttribute("faceRecognitlist", faceRecognitlist);
PageInfo pageInfo = new PageInfo(faceRecognitlist, 3);
PageUtil.getPageMsg(model, pageInfo);
return "faceRecognitList";
}
後臺把查詢到內容包括圖片路徑放到model中直接返回頁面,頁面用了themleaf模板來顯示
<div class="fileupload-new thumbnail">
<img th:src="@{${customer.image}}" alt="" style="width: 150px; height: 150px;" />
</div>
相關文章
- springboot專案上傳儲存圖片到七牛雲伺服器Spring Boot伺服器
- React Native 上傳圖片至七牛雲端儲存React Native
- pbootcms後臺圖片上傳提示:上傳失敗:儲存目錄建立失敗!boot
- PbootCMS後臺圖片上傳提示:”上傳失敗:儲存目錄建立失敗!“boot
- 儲存圖片
- base64 編碼轉圖片儲存本地和上傳 oss
- Laravel 騰訊雲 Cos 物件儲存 sdk 使用示例 上傳圖片Laravel物件
- java,springboot + thymeleaf 上傳圖片、刪除圖片到伺服器、本地,壓縮圖片上傳(有些圖片會失真),原圖上傳JavaSpring Boot伺服器
- PbootCMS網站後臺圖片上傳提示:”上傳失敗:儲存目錄建立失敗!“boot網站
- PbootCMS網站後臺圖片上傳提示:“上傳失敗:儲存目錄建立失敗!”boot網站
- 安卓上傳圖片到伺服器並儲存到電腦本地安卓伺服器
- 微信小程式基於騰訊雲物件儲存的圖片上傳微信小程式物件
- Java實現圖片上傳到伺服器,並把上傳的圖片讀取出來Java伺服器
- 上傳圖片
- 小程式踩坑記錄-上傳圖片及canvas裁剪圖片後上傳至伺服器Canvas伺服器
- 儲存圖片到SD卡SD卡
- asp.net儲存圖片ASP.NET
- electron上傳圖片
- 上傳圖片jsJS
- 裁剪上傳圖片
- 圖片上傳及圖片處理
- Nodejs如何把接收圖片base64格式儲存為檔案儲存到伺服器上NodeJS伺服器
- C# 截圖並儲存為圖片C#
- 【轉】mysql儲存圖片技術決定:儲存二進位制檔案還是隻儲存圖片相對路徑,圖片放在硬碟上面?MySql硬碟
- 移動端長按儲存、取消長按儲存圖片
- 多圖片formpost上傳ORM
- spring boot 圖片上傳Spring Boot
- 測試圖片上傳
- input file圖片上傳
- 本地Markdown上傳圖片
- PbootCMS上傳圖片變模糊、上傳圖片尺寸受限的解決方案boot
- Acrobat怎麼批次儲存PDF小圖片?adobe Acrobat一鍵儲存pdf小圖片的技巧BAT
- Acrobat怎麼批量儲存PDF小圖片?adobe Acrobat一鍵儲存pdf小圖片的技巧BAT
- 上傳圖片 以及做成縮圖
- vue 上傳圖片進行壓縮圖片Vue
- iOS實現點選圖片放大&長按儲存圖片iOS
- Ueditor 上傳圖片自動新增水印(只能上傳圖片,上傳檔案報錯)
- 圖片儲存-從七牛到 GithubGithub