springboot实现文件上传步骤解析

网友投稿 305 2022-12-18


springboot实现文件上传步骤解析

这篇文章主要介绍了springboot实现文件上传步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

第一步编写上传的前段页面

data-target="#documentOprModal" style="margin-left: 10px;float:left">

单个文件上传

data-backdrop="static" data-keyboard="false">

aria-hidden="true">×

rows="5" cols="60">

cols="60">

保存

取消

第二步写对应的js页面

/**

* @Name:historyStorageCtrl,井史数据入库

* @Date:2019-06-19

* @Author:huofenwei

*/

(function (angular) {

'use strict';

angular.module('Lujing').controller('historyStorageCtrl', ['$scopbWczDJIe', '$http', 'ToastService', '$compile', '$timeout', 'HttpService','$filter',

function ($scope, $http, ToastService, $compile, $timeout, HttpService,$filter) {

$scope.fileInvalid = false;

var $fileInput = initFileInput("importFile", '/server/search/upload');

/**

*初始化文件上传

*/

function initFileInput(ctrlName, uploadUrl) {

var control = $('#' + ctrlName);

control.fileinput({

language: 'zh',

uploadUrl: uploadUrl, //上传的地址

allowedFileExtensions: ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'pdf', 'mp4', 'avi','wmv','asf','asx','rm','rmvb','3gp','mov','m4v','dat','mkv','flv','vob'],

showUpload: true, //是否显示上传按钮

showCaption: true, //是否显示标题

showPreview: false, //是否显示预览区域

browseClass: "btn btn-primary", //按钮样式

previewFileIcon: "",

}).on('fileuploaderror', fileuploaderror).on("fileuploaded", function (event, data, previewId, index) {

// console.log(data);.on('fileselect', fileselect)

$scope.$apply(function () {

$scope.fileId = data.response.fileId; // 未执行

$scope.document.fileName = data.files[0].name;

});

}).on("filecleared", function (event, data, msg) {

$scope.$apply(function () {

$scope.fileInvalid = false;

});

});

return control;

}

/**

* 清空输入框

*/

function importClearFunc() {

if ($fileInput)

$fileInput.fileinput('clear');

$scope.fileInvalid = false;

}

/**

* 文件上传错误

**/

function fileuploaderror(event, data, msg) {

$scope.fileInvalid = true;

$scope.$apply();

$('.modal-body .kv-upload-progress').css('display', 'none');

if (!(data.jqXHR.responseJSON)) { //文件类型验证错误

$('#fileError').html(msg);

} else { //上传错误

console.log(data);

var statusCode = data.jqXHR.responseJSON.message;

var errorMsg = HTTP_ERROR_MAP['' + statusCode];

$('#fileError').html(errorMsg);

}

}

/**

* add 打开添加模态框

*/

$scope.openAddModal = function () {

$scope.document = {};

$scope.document.classificationId = 1;

$scope.document.starGrade = 5;

$timeout(importClearFunc);

// openModeldialog();

};

/**

* 表单验证

* @returns {boolean}

*/

function formVlidate() {

if (!$scope.document.introduction) {

return false;

}

if (!$scope.document.keyPackage) {

return false;

}

return true;

}

/**

* 提交表单信息

*/

$scope.submitFileInfo = function () {

if (!$scope.fileId) {

// ToastService.alert("提示", "先上传文件,再提交表单", "info");

console.error("先上传文件,再提交表单");

return;

}

if (!formVlidate()) {

// ToastService.alert("提示", "请填充表单", "info");

console.error("请填充表单");

return;

}

$scope.params = {

'introduction': $scope.document.introduction,//简介

'keyPackage': $scope.document.keyPackage,//可能查询的关键字

'starGrade': $scope.document.starGrade,//星级

'classificationId': $scope.document.classificationId,//文件的id

'filePath': $scope.fileId,//文件的路径

'docName': $scope.document.fileName,//文件的名字

'author':$scope.document.author,

'unit':$scope.document.unit,

'writeDate':$scope.document.writeDate?$scope.document.writeDate.format("yyyy-MM-dd hh:mm:ss"):$scope.document.writeDate,

'jh': $scope.document.jh,

'id': $scope.document.id

};

HttpService.post("/server/search/submit", $scope.params).then(function (data) {

$('#documentOprModal').modal('hide');

// $("#contTable").bootstrapTable('refresh');

console.error("提交文件信息成功");

}, function (response) {

// ToastService.alert("提示", "提交文件信息出错", "warning");

console.error("提交文件信息出错");

});

}

}

])

})(angular);

第三部编写后台上传文件和提交表单的代码

package com.shiwen.yitihui.server.controller;

import java.io.File;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import java.util.UUID;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.multipart.MultipartFile;

import com.shiwen.yitihui.common.Snowflake;

import com.shiwen.yitihui.domain.DocClassification;

import com.shiwen.yitihui.domain.DocType;

import com.shiwen.yitihui.domain.DocumentFile;

import com.shiwen.yitihui.domain.FileEntity;

import com.shiwen.yitihui.server.service.DocumentFileService;

/**

* @author wangjie:

* @version 创建时间:2019年8月26日 上午11:54:22

* @Description 类描述:

*/

@RestController

@RequestMapping("/search")

public class UploadFileController {

@Autowired

private DocumentFileService dfservice;

private String uploadPath="E://file";

/**

* 上传文件

* @param file

* @return

*/

@PostMapping("/upload")

public Map uploadFile(MultipartFile file){

Map map = new HashMap();

try {

//文件的对象

FileEntity fEntity = new FileEntity();

String uuid = UUID.randomUUID().toString();

//文件的id

fEntity.setId(uuid.replaceAll("-", ""));//String.valueOf(Snowflake.getNextKey()));

//文件的名字

fEntity.setFileName(file.getOriginalFilename());

//上传文件的时间

fEntity.setUploadTime(new Date());

//上传者

fEntity.setUploadBy("admin");

//文件的后缀

String suffix = fEntity.getFileName().substring(fEntity.getFileName().indexOf("."));

//文件存放的完整路径

fEntity.setFinePathName(uploadPath + File.separator + fEntity.getId() + suffix);

//文件的类型

fEntity.setDocType(new DocType());

//设置文件的类型

fEntity.getDocType().setId(getDocTypeId(fEntity.getFileName()));

//创建文件的对象

File newFile = new File(fEntity.getFinePathName());

//上传文件

file.transferTo(newFile);

map.put("result", "success");

map.put("fileId", fEntity.getId());

}catch(Exception e) {

// e.printStackTrace();

map.put("result", "fail");

}

return map;

}

/**

* 提交表单

* @param df

* @return

*/

@PostMapping("/submit")

public Map submitFileInfo(@RequestBody DocumentFile df) {

Map map = new HashMap();

try {

if (df.getId() == null || df.getId().isEmpty() || df.getId() == "") {

df.setId(String.valueOf(Snowflake.getNextKey()));

}

String suffix = df.getDocName().substring(df.getDocName().indexOf("."));

df.setFilePath(uploadPath + File.separator + df.getFilePath() + suffix);

df.setUploadBy("admin");// 用户名称 df.setUploadTime(new java.util.Date());

df.setUploadTime(new Date());

df.setDownloadNumber(0L);

df.setHeat(0L);

df.setRelated(20);

df.setDocType(new DocType());

df.getDocType().setId(getDocTypeId(suffix));

df.setClassification(new DocClassification());

df.getClassification().setId(df.getClassificationId());

dfservice.save(df);

map.put("result", "success");

} catch (Exception e) {

//e.printStackTrace();

map.put("result", "fail");

}

return map;

}

private Integer getDocTypeId(String fileName) {

if (fileName.contains(".doc")) {

return 1;

} else if (fileName.contains(".xls")) {

return 2;

} else if (fileName.contains(".pdf")) {

return 3;

} else if (fileName.contains(".ppt")) {

return 4;

}else {

return 5;

}

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot jta atomikos实现分布式事物管理
下一篇:如何解决线程太多导致java socket连接池出现的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~