總結1:Ajax上傳圖片至阿里云服務器

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";}}

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273712.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273712.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273712.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode::Subsets

Given a set of distinct integers, S, return all possible subsets. 分析&#xff1a;題目就是給一個整數集合&#xff0c;給出所以的子集。 基本思想是遞歸或者說是迭代的方法。用前面得到的集合來構造 后面的。但是怎樣高效、方便的構造集合是關鍵點。比如&#xff0c;開始…

總結2:上傳圖片至指定服務器

1.前段頁面以及JS <!-- HTML --> <section class"content"><div class"row"><div class"col-xs-12"><div class"box box-success"><div class"row" style"margin-top: 1%;margin-bu…

蘋果新的編程語言 Swift 語言進階(一)--綜述

Swift 是蘋果開發和提供的供開發IOS 和OS X應用的一門新的語言。Swift語言基于C 和Objective-C語言&#xff0c;除了提供C 和Objective-C語言具有的所有語法功能外&#xff0c;為了編程方便和高效&#xff0c;Swift在語法上作了大量的優化和改進。 Swift采用安全編程模式&#…

總結3:IDEA中使用${pageContext.request.contextPath}填寫路徑時出錯

問題描述&#xff1a; 之前一個項目在eclipse中開發的&#xff0c;其中有使用到 <jsp:include page"${pageContext.request.contextPath}/../head.jsp"/>啟動項目成功&#xff0c;訪問出錯。在換到IDEA中啟動項目時提示路徑出錯&#xff0c;當把路徑修改為 …

操作12864(ST7920控制器)

引腳部分查看中文的12864介紹&#xff0c;下面這些可以在ST7920的英文數據手冊里查到。 Function Description 部分介紹工作方式、存儲器、操作方法。Instructions 部分介紹指令。按照并行或串行的 Timing Diagram 來操作&#xff0c;注意數據何時有效。查看初始化的流程圖&…

問題之傳遞參數名和接收參數名要一致。

前端傳遞發送的Ajax請求&#xff0c;請求參數為data data: {organizationId:$("#organId").val()},//data.field 后端接受參數 //錯誤接受參數 RequestMapping(value "") ResponseBody public Object findAll(Integer organId) { return…

總結4:input文本輸入框自動提示

1、頁面效果 2、引入CSS/JS <link rel"stylesheet" href"css/jquery-ui.min.css"><script src"https://code.jquery.com/jquery-1.12.4.js"></script><script src"https://code.jquery.com/ui/1.12.1/jquery-ui.js&qu…

Map集合遍歷

//創建一個map對象并賦值Map<String, String> map new HashMap<String, String>();for (int i 0; i < 10; i) {map.put("Key" i, "Value" i);}//使用keySet便利Set<String> keySet map.keySet();for (String s : keySet) {Syste…

MySql數據同步FEDERATED引擎

概要&#xff1a;FEDERATED存儲引擎訪問在遠程數據庫的表中的數據&#xff0c;而不是本地的表。這個特性給某些開發應用帶來了便利&#xff0c;你可以直接在本地構建一個federated表來連接遠程數據表&#xff0c;配置好了之后本地表的數據可以直接跟遠程數據表同步。實際上這個…

SpringBoot 配置多數據源(Sql Server、MySql)

創建SpringBoot項目就不說了。(直接使用IDEA創建就好了) 整個目錄結構如圖&#xff1a;&#xff08;不用管圖中報錯&#xff0c;項目是在另一臺電腦上寫的。報錯是沒有jar包&#xff0c;因為網絡比較慢。&#xff09; 1、主要pom.xml <dependencies><dependency>…

【SQL語句】MySql、SqlServer查詢近期記錄

#-------------------------MYSQL------------------------- #每小時記錄 SELECT HOUR(open_time) hourNum, COUNT(1) hourCount FROM b_entrance_guard_record GROUP BY HOUR(open_time) #近六個月出入記錄 SELECT MONTH(n.open_time) monthNum, COUN…

SpringBoot 記錄操作日志

目錄結構&#xff1a; 1、創建springboot項目&#xff0c;添加依賴。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>…

SpringBoot 配置記錄

# 圖片上傳 配置圖片上傳大小 spring:servlet:multipart:max-file-size: 100MBmax-request-size: 100MBdatasource:#數據庫文件存放 /doc/sql目錄下url: jdbc:mysql://localhost:3306/merchant_pay?useUnicodetrue&characterEncodingUTF-8&autoReconnecttrue&f…

py2.7+pyqt4開發端口檢測工具

py2.7pyqt4開發端口檢測工具 使用工具&#xff1a;python2.7,pyqt4,pyinstaller,pywin32 先貼代碼 1 import sys2 from PyQt4 import QtGui,QtCore3 4 import threading5 import thread6 import os7 import re8 import urllib9 import socket10 import time11 12 13 global max…

MySql 創建存儲過程

DELIMITER $$ #以delimiter來標記用$表示存儲過程結束 CREATE PROCEDURE ownerapartment() ##創建pre()存儲方法 BEGIN DECLARE i INT; #定義i變量 SET i1; WHILE i<35 DO #對i的值配置INSERT INTO owner_apartment (id, owner_id,property_id, community_id, buildi…

opencv 和 parfor

一次遇到兩個不熟悉的&#xff0c;因此在一起記一下。 OpenCV的全稱是&#xff1a;Open Source Computer Vision Library。 OpenCv是一個基于&#xff08;開源&#xff09;發行的跨平臺計算機視覺庫&#xff0c;可以運行在Linux,Windows和Mac OS操作系統上。它輕量級而且高效—…

POI 導出

1.添加依賴 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency> 2.POI工具類 import java.io.UnsupportedEncodingException; import javax.servlet.http.Htt…

度量空間的基本性質

收斂性 $\bf命題&#xff1a;$ 連續性 $\bf命題&#xff1a;$ 稠密性 $\bf命題&#xff1a;$設$E$為度量空間$X$中的點集&#xff0c;則$E$在$X$中稠密的充要條件是對任意的$x \in X$&#xff0c;存在點列$\left\{ {{x_n}} \right\} \subset E$&#xff0c;使得${x_n} \to x\…

@Value 注入靜態變量

1、定義配置類 Component public class FilePathConfig {public static String httpResUrl;public static String savePath;public static String resUri;public String getHttpResUrl() {return httpResUrl;}Value("${file.path.httpResURL}")public void setHttpR…

配置錯誤定義了重復的“system.web.extensions/scripting/scriptResourceHandler” 解決辦法...

今天遇到了這個問題&#xff0c; 電腦系統&#xff1a;vs2010 win7系統 iis7 我運行在iis中配置的那個網站后&#xff0c;報錯&#xff1a;錯誤代碼 0x800700b7 配置錯誤定義了重復的“system.web.extensions/scripting/scriptResourceHandler”節 這個問題原因在于window7的II…