总结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,一经查实,立即删除!

相关文章

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

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>…

SpringBoot 记录操作日志

目录结构&#xff1a; 1、创建springboot项目&#xff0c;添加依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>…

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…

opencv 和 parfor

一次遇到两个不熟悉的&#xff0c;因此在一起记一下。 OpenCV的全称是&#xff1a;Open Source Computer Vision Library。 OpenCv是一个基于&#xff08;开源&#xff09;发行的跨平台计算机视觉库&#xff0c;可以运行在Linux,Windows和Mac OS操作系统上。它轻量级而且高效—…

配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler” 解决办法...

今天遇到了这个问题&#xff0c; 电脑系统&#xff1a;vs2010 win7系统 iis7 我运行在iis中配置的那个网站后&#xff0c;报错&#xff1a;错误代码 0x800700b7 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节 这个问题原因在于window7的II…

Base64 四种方式的编码和解码

base64与字符串String之间的相互转换 package com.wzq;import javax.xml.bind.DatatypeConverter; import java.io.UnsupportedEncodingException; import java.util.Base64;/*** ClassName Base64Utils* Description: TODO* Author wzq* CreateDate 2019/10/14* UpdateDate 2…

邮件服务器“单点登录”功能

现状分析&#xff1a; 相信我们每个人都有这样的经历&#xff0c;比方说银行卡多的人要具体记忆每张卡的密码挺麻烦&#xff1b;现代人兴 趣广泛&#xff0c;爱好多多&#xff0c;运动健身俱乐部、娱乐游戏休闲、购物理财等各种场合少不了获得入门的“通行证”&#xff0c;要输…

【kafka】 windows平台搭建及使用

一、安装 kafka 需要java环境&#xff1b;kafka 最新版本内置了 zookeeper&#xff0c;所以不需要安装zookeeper&#xff1b;下载kafka最新版本&#xff0c;因为下载的是tgz文件&#xff0c;所以不需要安装&#xff0c;解压到相应的地方就可以了。下载地址&#xff1a;http://…

Unix/Linux环境C编程入门教程(16) LinuxMint CCPP开发环境搭建

1.Linux Mint由Linux Mint Team团队于2006年开始发行&#xff0c;是一份基于Debian和Ubuntu的Linux发行版。其目标是提供一种更完整的即刻可用体验&#xff0c;这包括提供浏览器插件、多媒体编解码器、对DVD播放的支持、Java和其他组件&#xff0c;它也增加了一套定制桌面及各种…

Extjs发票管理系统

技术特点&#xff1a;Extjs框架&#xff0c;三层架构&#xff0c;Ajax,json 1.仿office2007菜单.介面美观大方,可动态更改皮肤保存至cookie。 2,json数据源与实体类的相互转换. 3.可下载桌面版登录方式,统计在线人数. 4, chm操作手册,方便操作人员熟悉. 功能描述&#xff1a; 1…

Json串和java对象进行转时

json-lib-xxx.jarezmorph-xxx.jar //>依赖包 JsonConfig config new JsonConfig();//有选择性的过滤掉一些属性值 JSONUtils.getMorpherRegistry().registerMorpher( new DateMorpher(new String[] { "yyyy-MM-dd" }));//注册一个json转为java.util.date的日期格…

Fast Matrix Operations

uva11992:http://uva.onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem3143 题意&#xff1a;给你n*m的矩阵初始化的时候矩阵里面的元素全部是0&#xff0c;对于这个矩阵有3中操作。 1 x1 y1 x2 y2 v 把&#xff08;x1 y1 x2…

struts2+jquery 实现ajax登陆

一、新建一个web项目&#xff1a;test,配置好struts2的环境(详细配置见&#xff1a;http://www.cnblogs.com/wuweidu/p/3841297.html) 导入Jquery的js文件到项目 二、在com.action包下&#xff0c;新建一个loginAction.java loginAction.java的代码如下 package com.action;imp…

Docker Kafka 单机版安装

一、安装 下载library/zookeeper并运行 docker run --name zookeeper -d -p 2181:2181 -v /etc/localtime:/etc/localtime library/zookeeper 测试zookeeper端口是否通wget IP:2181 下载wurstmeister/kafka并运行 docker run -d --name kafka -p 9092:9092 --link zookeeper…

Docker 安装nginx,并挂载文件

创建挂载所需目录&#xff1a; mkdir /test/server/nginx/{conf,logs,html,conf.d} /test/server/nginx/conf创建nginx.conf文件&#xff0c;并编辑: user nginx; worker_processes 1;error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;events {wor…

ArrayList 源码分析

介绍 ArrayList 是一个数组队列&#xff0c;相当于 动态数组。与Java中的数组相比&#xff0c;它的容量能动态增长。 结构 ArrayList继承于AbstractList&#xff0c;实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。如下图&#xff1a; public class Arra…

Docker 简单入门(一)

Docker 简介 Docker是一个开源的容器引擎&#xff0c;它有助于更快地交付应。Docker可将应用程序和基础设施层隔离&#xff0c;并且能将基础设施当作程序-样进行管理。使用Docker&#xff0c;可更快地打包、测试以及部署应用程序,并可以缩短从编写到部署运行代码的周期。 Docke…

PDF解决方案(2)--文件转PDF

相关专题链接&#xff1a; PDF解决方案&#xff08;1&#xff09;--文件上传 PDF解决方案&#xff08;2&#xff09;--文件转PDF PDF解决方案&#xff08;3&#xff09;--PDF转SWF PDF解决方案&#xff08;4&#xff09;--在线浏览 前言&#xff1a;上一篇中讲到的文件上传&…