1.頁面效果以及JS
?
<!-- HTML -->
<div style="margin:30px;"><div class="form-horizontal rowt"><div class="control-label col-lg-1">標書分類</div><div class="col-lg-2"><select required="required" id="category" class="form-control"><option value="" selected>請選擇</option></select></div></div><div class="form-horizontal rowt" style="margin-top:20px;"><div class="control-label col-lg-1" >上傳文件</div><div class="col-lg-2" style="margin-top: 7px;"></label><input id="uploadfile" type="file" /></div></div><div class="rowt"><div style="margin:20px 126px;"><button id="upload" type="button" class="btn btn-primary" data-toggle="button" aria-pressed="false" autocomplete="off">提交</button><button id="goShareBookPage" type="button" class="btn btn-primary" data-toggle="button" aria-pressed="false" autocomplete="off">返回</button></div></div>
</div>
<!-- JS -->
$("#upload").click(function(){var category = $("#category").val();var file = $("#uploadfile").val();if(category!='' && category!=null){if (file!=null && file!='') {var fileData = new FormData();var file = document.getElementById("uploadfile");var filObj = file.files[0];fileData.append("file",filObj); //上傳文件參數fileData.append("category",category); //其他參數$.ajax({xhrFields: {withCredentials: true},url:baseUrl+"/shareBookApi/uploadFile",type:'POST', contentType:false, //避免JQuery對其操作,詳解https://blog.csdn.net/toubaokewu/article/details/74910799#commentseditprocessData:false, //告訴jQuery不要去處理發送的數據async:false, //async. 默認是 true,即為異步方式;設置為 false,則所有的請求均為同步請求data:fileData,success:function (data) {if(data!='' && data !=null){alert('上傳成功,等待審核!');}else{alert('上傳失敗!');}},error: function (data) {console.log(data);alert('上傳失敗!');}});}else{alert('請選擇文件!'); }}else{alert('請選擇分類!');}});
2.后端代碼
阿里云OSS服務類
package cn.stylefeng.guns.modular.system.utils;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;import java.io.*;
import java.net.URL;
import java.util.Date;
import java.util.List;/*** 阿里云OSS服務類*/
@Slf4j
public class AliyunOssUtil {//Endpointpublic static final String Endpoint="***";public final static String accessKeyId = ***;public final static String secretaccesskey = ***;public final static String BUCKET_NAME=***/*** 刪除一個Bucket和其中的Objects** @param //client* @param //bucketName* @throws OSSException* @throws ClientException*/public static void deleteBucket(OSSClient client)throws OSSException, ClientException {ObjectListing ObjectListing = client.listObjects(BUCKET_NAME);List<OSSObjectSummary> listDeletes = ObjectListing.getObjectSummaries();for (int i = 0; i < listDeletes.size(); i++) {String objectName = listDeletes.get(i).getKey();// 如果不為空,先刪除bucket下的文件client.deleteObject(BUCKET_NAME, objectName);}client.deleteBucket(BUCKET_NAME);}/*** 把Bucket設置為所有人可讀** @param //client* @param //bucketName* @throws OSSException* @throws ClientException*/public static void setBucketPublicReadable(OSSClient client)throws OSSException, ClientException {//創建bucketclient.createBucket(BUCKET_NAME);//設置bucket的訪問權限,public-read-write權限client.setBucketAcl(BUCKET_NAME, CannedAccessControlList.PublicRead);}/*** 上傳文件** @param //client* @param filename* @throws OSSException* @throws ClientException* @throws FileNotFoundException*/public static String uploadFile(String filename) {try {OSSClient client = getOssClient();log.info("filename:"+filename);File file = new File(filename);ObjectMetadata objectMeta = new ObjectMetadata();objectMeta.setContentLength(file.length());String type=getContentType(filename);objectMeta.setContentType(type==null?"image/gif":type);InputStream input = new FileInputStream(file);String key=type+"/"+IDUtils.genImageName();PutObjectResult result = client.putObject(BUCKET_NAME, key, input, objectMeta);if(result!=null){return getUrl(client,key);}}catch (Exception e){e.printStackTrace();log.error(e.getMessage());}return null;}/*** 下載文件** @param //client* @param //bucketName* @param key* @param filename 新文件名* @throws OSSException* @throws ClientException*/public static InputStream downloadFile(OSSClient client, String key, String filename)throws OSSException, ClientException {
// Object obj = client.getObject(new GetObjectRequest(BUCKET_NAME, key),
// new File(filename));OSSObject ossObject = client.getObject(BUCKET_NAME, key);return ossObject.getObjectContent();}/*** 創建一個文件夾** @param //client* @param //bucketName* @param folderPah 文件夾名*/public static void createFolder(String folderPah) {OSSClient client = getOssClient();ObjectMetadata objectMeta = new ObjectMetadata();byte[] buffer = new byte[0];ByteArrayInputStream in = new ByteArrayInputStream(buffer);objectMeta.setContentLength(0);try {client.putObject(BUCKET_NAME, folderPah, in, objectMeta);} catch (Exception e) {e.printStackTrace();} finally {try {in.close();} catch (IOException e) {e.printStackTrace();}}}/*** 獲得url鏈接** @param key* @return*/public static String getUrl(OSSClient ossClient,String key) {// 設置URL過期時間為10年 3600l* 1000*24*365*10Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);// 生成URLURL url = ossClient.generatePresignedUrl(BUCKET_NAME, key, expiration);if (url != null) {return url.toString();}return null;}/*** 獲取文件類型* @param fileName* @return*/public static String getContentType(String fileName) {String fileExtension = fileName.substring(fileName.lastIndexOf("."));if (".bmp".equalsIgnoreCase(fileExtension)) {return "image/bmp";}if (".gif".equalsIgnoreCase(fileExtension)) {return "image/gif";}if (".jpeg".equalsIgnoreCase(fileExtension) || ".jpg".equalsIgnoreCase(fileExtension) || ".png".equalsIgnoreCase(fileExtension)) {return "image/jpeg";}if(".json".equalsIgnoreCase(fileExtension)){return "json";}if(".mp3".equalsIgnoreCase(fileExtension)){return "mp3";}if(".txt".equalsIgnoreCase(fileExtension)){return "txt";}if(".doc".equalsIgnoreCase(fileExtension)){return "doc";}if(".docx".equalsIgnoreCase(fileExtension)){return "docx";}return null;}/*** ??? * 上傳圖片至OSS* ??? * @param file* ??? * @return* ???*/public static String uploadFile(MultipartFile file) {log.info("oos上傳");String resultStr = null;try {OSSClient client = getOssClient();String fileName = file.getOriginalFilename();Long fileSize = file.getSize();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(fileSize);metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");String type=getContentType(fileName);metadata.setContentType(getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");//上傳文件String key=type+"/"+IDUtils.genImageName();PutObjectResult result = client.putObject(BUCKET_NAME, key, file.getInputStream(), metadata);if(result!=null){resultStr= getUrl(client,key);}} catch (IOException e) {e.printStackTrace();}log.info("resultStr"+resultStr);return resultStr;}/*** 上傳到OSS服務器 如果同名文件會覆蓋服務器上的** @param instream 文件流* @param fileName 文件名稱 包括后綴名* @return 出錯返回"" ,唯一MD5數字簽名*/public static String uploadFile2OSS(InputStream instream, String fileName) {String ret = "";try {//創建上傳Object的MetadataOSSClient client = getOssClient();ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setContentLength(instream.available());objectMetadata.setCacheControl("no-cache");objectMetadata.setHeader("Pragma", "no-cache");objectMetadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));objectMetadata.setContentDisposition("inline;filename=" + fileName);//上傳文件String name=System.currentTimeMillis()+"";PutObjectResult putResult = client.putObject(BUCKET_NAME, name, instream, objectMetadata);ret = putResult.getETag();return getUrl(client,name);} catch (IOException e) {log.error(e.getMessage(), e);} finally {try {if (instream != null) {instream.close();}} catch (IOException e) {e.printStackTrace();}}return null;}/*** 流式上傳文件-上傳文件流* InputStream inputStream = new FileInputStream("localFile");*/public static String upFObject(MultipartFile inputStream){try {OSSClient client = getOssClient();if(!client.doesBucketExist(BUCKET_NAME)){client.createBucket(BUCKET_NAME);}String filename = inputStream.getOriginalFilename(); //文件名帶后綴.txtString prefix = filename.substring(filename.lastIndexOf(".") + 1);System.out.println(prefix);ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(inputStream.getSize());metadata.addUserMetadata("filename", "123");String reName = IDUtils.genImageName()+"."+prefix;//瀏覽器下載metadata.setContentDisposition("attachment;filename="+reName);String key="json"+"/"+reName;client.putObject(BUCKET_NAME, key, new ByteArrayInputStream(inputStream.getBytes()), metadata);//獲取該文件在阿里云的路徑client.shutdown();return getUrl(client,key);}catch (Exception e){e.printStackTrace();}return null;}/*** 刪除一個OSS文件對象** @param //client* @param //bucketName* @param key*/public static void deleteObject( String key) {OSSClient client = getOssClient();client.deleteObject(BUCKET_NAME, key);}public static OSSClient getOssClient() {return new OSSClient(Endpoint, accessKeyId, secretaccesskey);}public static void main(String[] args) {OSSClient client = getOssClient();String String=uploadFile("C:\\Users\\jiuying\\Desktop\\新建文本文檔.txt");System.out.println(String);}
}
上傳圖片控制層
/*** @author * @date Learning never ends*/
@Controller
@Slf4j
public class ShareBookApiController {/*** 上傳文件并添加標書*/@RequestMapping(value = "/uploadFile")@ResponseBodypublic Object getuploadFile(MultipartFile file,String category, HttpServletRequest request) {System.out.println(file.getOriginalFilename() + "getOriginalFilename");System.out.println(file.getContentType() + "getContentType");System.out.println(file.getSize() + "getSize");String fileUrl = AliyunOssUtil.upFObject(file);return "success";}}
?