总结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.mzph.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…