解決ajax傳送Formdata資料包含檔案和text資料,spring後臺無法通過MultipartFile拿到檔案
一開始直接使用ajax傳送Formdata資料,spring後臺multipartfile無法接受到檔案。
經查閱很多資料,發現給我的頁面加一個<form>表單,其他都不需要修改,後臺即可拿到檔案。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>加密與解密</title>
<link rel="stylesheet" href="css/bootstrap.min.css" />
<link rel="stylesheet" href="css/encrypt.css" />
<script type="text/javascript" src="js/encrypt.js" ></script>
<script type="text/javascript" src="js/jquery.min.js" ></script>
</head>
<body>
<form class="inpform" id="uploadForm" enctype="multipart/form-data">
<div class="col-lg-6">
<div class="input-group input-center">
<input id="t1" type="text" class="form-control" placeholder="請選擇需要加密的檔案">
<span class="input-group-btn">
<input type="file" id="file" name="mpfile" onchange="getFilePath()" style="filter:alpha(opacity=0);opacity:0;width: 0;height: 0;"/>
<button id="bj1" class="btn btn-default" type="button" onclick="selectFile();">請選擇</button>
</span>
</div>
<div class="input-group input-center">
<input id="t2" name="key" type="password" class="form-control" placeholder="請選輸入金鑰(或隨機生成)">
<span class="input-group-btn">
<button id="bj2" class="btn btn-default" type="button" onclick="KeyRandom()">隨機生成</button>
</span>
</div>
<div class="radio">
<label class="radio-inline">
<input type="radio" name="optionsRadiosinline" id="optionsRadios1" value="1" checked> 加密
</label>
<label class="radio-inline">
<input type="radio" name="optionsRadiosinline" id="optionsRadios2" value="2"> 解密
</label>
</div>
<div class="radio">
<label class="radio-inline">
<input type="radio" name="optionsRadiosinline2" id="optionsRadios3" value="3" checked> ECB模式
</label>
<label class="radio-inline">
<input type="radio" name="optionsRadiosinline2" id="optionsRadios4" value="4"> CBC模式
</label>
</div>
<div class="radio">
<label class="radio-inline">
<input type="radio" name="optionsRadiosinline3" id="optionsRadios5" value="5" checked> 操作後上傳
</label>
<label class="radio-inline">
<input type="radio" name="optionsRadiosinline3" id="optionsRadios6" value="6"> 操作後下載
</label>
</div>
<div class="button">
<button id="btn1" type="button" class="btn btn-primary" onclick="Save()">上傳</button>
</div>
<div class="button">
<span>請先上傳檔案再下載!</span>
</div>
<div class="button">
<button id="btn2" type="button" class="btn btn-primary" onclick="DownLoad()">下載</button>
</div>
</div>
</form>
</body>
</html>
spring後臺:
package com.cczu.sm.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FileUtils;
import org.bouncycastle.util.encoders.Hex;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import com.cczu.sm.entity.SM3Digest;
import com.cczu.sm.entity.SM4;
import com.cczu.sm.entity.SM4Utils;
import com.cczu.sm.entity.SM4_Context;
import com.cczu.sm.entity.Util;
@Controller
public class SmController {
@RequestMapping("/sm")
@ResponseBody
public void getFile(String optionsRadiosinline3,
String optionsRadiosinline2, String optionsRadiosinline,
String key, MultipartFile mpfile) throws Exception {
String filename = mpfile.getOriginalFilename();
String mykey = key;
String myoption = optionsRadiosinline;
System.out.println("金鑰:" + mykey + "\n" + "檔名:" + filename + "\n"
+ "功能選擇:" + myoption);
byte[] input = mpfile.getBytes();
//SM3雜湊金鑰
byte[] md = new byte[32];
byte[] msg1 = mykey.getBytes();
SM3Digest sm3 = new SM3Digest();
sm3.update(msg1, 0, msg1.length);
sm3.doFinal(md, 0);
String s = new String(Hex.encode(md)).substring(0, 16).toUpperCase();
// System.out.println("雜湊金鑰:" + s);
//SM4加密
//optionsRadiosinline等於1加密,等於2解密
//optionsRadiosinline2等於3ECB模式,等於4CBC模式
if (optionsRadiosinline.equals("1")) {
//SM4設定加密金鑰
SM4 s4 = new SM4();
SM4_Context ctx = new SM4_Context();
ctx.isPadding = true;
ctx.mode = SM4.SM4_ENCRYPT;
byte[] keyBytes = s.getBytes();
s4.sm4_setkey_enc(ctx, keyBytes);
if (optionsRadiosinline2.equals("3")) {
//ECB模式
String path = "";
//等於5上傳儲存伺服器,等於6上傳操作後下載
if (optionsRadiosinline3.equals("5")) {
path = "F:\\MyEclipse 9Workspaces\\sm\\smfile\\";
} else {
path = "F:\\MyEclipse 9Workspaces\\sm\\smfiledown\\";
}
File file = new File(path + filename + ".encecb");
if (file.exists()) {
file.delete();
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file);
out.write(s4.sm4_crypt_ecb(ctx, input), 0,
s4.sm4_crypt_ecb(ctx, input).length);
out.close();
} else {
//CBC模式
String path = "";
if (optionsRadiosinline3.equals("5")) {
path = "F:\\MyEclipse 9Workspaces\\sm\\smfile\\";
} else {
path = "F:\\MyEclipse 9Workspaces\\sm\\smfiledown\\";
}
File file = new File(path + filename + ".enccbc");
FileOutputStream out = new FileOutputStream(file);
out.write(s4.sm4_crypt_cbc(ctx, keyBytes, input), 0,
s4.sm4_crypt_cbc(ctx, keyBytes, input).length);
out.close();
}
} else {
//解密操作
//SM4設定加密金鑰
SM4 s4 = new SM4();
SM4_Context ctx = new SM4_Context();
ctx.isPadding = true;
ctx.mode = SM4.SM4_DECRYPT;
byte[] keyBytes = s.getBytes();
s4.sm4_setkey_dec(ctx, keyBytes);
if (optionsRadiosinline2.equals("3")) {
//ECB模式
String path = "";
//等於5上傳儲存伺服器,等於6上傳操作後下載
if (optionsRadiosinline3.equals("5")) {
path = "F:\\MyEclipse 9Workspaces\\sm\\smfile\\";
} else {
path = "F:\\MyEclipse 9Workspaces\\sm\\smfiledown\\";
}
File file = new File(path
+ filename.substring(0, filename.lastIndexOf(".")));
if (file.exists()) {
file.delete();
file.createNewFile();
}
FileOutputStream out = new FileOutputStream(file);
out.write(s4.sm4_crypt_ecb(ctx, input), 0,
s4.sm4_crypt_ecb(ctx, input).length);
out.close();
} else {
//CBC模式
String path = "";
if (optionsRadiosinline3.equals("5")) {
path = "F:\\MyEclipse 9Workspaces\\sm\\smfile\\";
} else {
path = "F:\\MyEclipse 9Workspaces\\sm\\smfiledown\\";
}
File file = new File(path
+ filename.substring(0, filename.lastIndexOf(".")));
FileOutputStream out = new FileOutputStream(file);
out.write(s4.sm4_crypt_cbc(ctx, keyBytes, input), 0,
s4.sm4_crypt_cbc(ctx, keyBytes, input).length);
out.close();
}
}
}
}
相關文章
- ajax上傳檔案,spring mvc獲取檔案並處理,通過頁面按鈕傳送url,由後臺控制檔案下載SpringMVC
- 顯示所有檔案和資料夾"失效 解決無法顯示所有檔案和資料夾
- http不使用Form表單傳送檔案資料和非檔案資料(上傳篇)HTTPORM
- laravel 使用 axios 通過 put 上傳檔案獲取不到資料的解決辦法LaraveliOS
- 使用FormData+jQuery+AJAX傳送檔案至又拍雲,實現無重新整理上傳ORMjQuery
- AJAX資料互動及檔案上傳功能
- 通過資料庫檔案還原資料庫資料庫
- 通過移動資料檔案來均衡檔案I/O
- 非歸檔資料檔案誤刪除解決辦法
- 利用FormData物件實現AJAX檔案上傳功能及後端實現ORM物件後端
- 資料庫檔案和檔案組資料庫
- 基於Ajax的formData圖片和資料上傳ORM
- oracle資料庫移動資料檔案、日誌檔案和控制檔案Oracle資料庫
- 外貿VIP社群:郵件無法傳送大檔案的解決方案
- vue 檔案上傳方法formDataVueORM
- 檔案包含漏洞(本地包含配合檔案上傳)
- linux下遠端傳送檔案命令,通過ssh協議傳輸檔案Linux協議
- 誤刪出資料檔案,透過dbca無法刪除資料庫問題資料庫
- 資料恢復新姿勢——通過ibd和frm檔案恢復資料資料恢復
- 檔案無法粉碎解決辦法
- 【/proc/檔案淺析】另類辦法恢復資料檔案和控制檔案
- 通過檔案控制程式碼恢復刪除的資料檔案
- 點選按鈕,實現檔案下載,通過按鈕傳送url,spring後臺實現伺服器端檔案下載。Spring伺服器
- 解決:windows無法拖拽檔案Windows
- 建立資料庫檔案-日誌檔案-次要資料庫檔案資料庫
- 使用jquery的FormData上傳檔案jQueryORM
- mysql通過frm、idb檔案恢復資料MySql
- 通過oracle event來dump資料檔案頭資訊Oracle
- hosts檔案如何修改 hosts檔案修改後無法儲存怎麼解決
- ORACLE中沒有引數檔案和控制檔案如何通過rman恢復資料庫Oracle資料庫
- 資料檔案
- 歸檔模式無備份丟失資料檔案後恢復模式
- Javascript 基礎夯實 —— 通過程式碼構建一個包含檔案的 FormData 物件JavaScriptORM物件
- ajax利用FormData、FileReader實現多檔案上傳php獲取ORMPHP
- ajax資料無法更新問題原因及解決
- 無備份丟失部分資料檔案和控制檔案恢復 [轉]
- Oracle資料檔案和臨時檔案的管理Oracle
- 表空間&資料檔案和控制檔案(zt)