//流式上传文件
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.length());
Upload upload = transferManager.upload("your-bucketname", "your-objectname", inputStream, objectMetadata);
UploadResult result = upload.waitForUploadResult();
3、上传目录
您可以使用TransferManager将某个目录下的文件全部上传到NOS,对象名即文件名
MultipleFileUpload result = transferManager.uploadDirectory("your-buckename", null, new File("dirPath"), false);
result.waitForCompletion();
- 3.2 支持多级目录,会递归的上传目录下的所有文件
MultipleFileUpload result = transferManager.uploadDirectory("your-buckename", null, new File("dirPath"), true);
result.waitForCompletion();
4、下载文件
File file = new File("your-destFile");
Download download = transferManager.download("your-bucketname", "your-objectname", file);
download.waitForCompletion();
[1] 网易数帆S3 Java SDK 手册
参考文档:https://docs.ceph.com/en/latest/radosgw/s3/java/#download-an-object-to-a-file环境准备Java环境:JDK6以上版本 SpringBoot 2.2.5 存储服务的 accessKey、secreKey 以及 地址:端口使用1. 引入依赖在pom.xml文件中添加下列依赖:<dependency> <groupId>com.amazonaws</group..
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.11.625</version>
</dependency&g...
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.a...
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.client.builder.AwsClie...
CREATE TABLE `brand` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '品牌id',
`name` varchar(100) NOT NULL COMMENT '品牌名称',
`image` varchar(1000) DEFAULT '' COMMENT '品牌图片地址',
`initial` varchar(1) DEFAULT '' COMMENT '品牌的首字母',
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.servi.
一、安装ActiveMQ
具体的安装步骤,请参考我的另一篇博文:
http://blog.csdn.net/liuchuanhong1/article/details/52057711
二、新建spring boot工程,并加入JMS(ActiveMQ)依赖
三、工程结构
pom依赖如下:
[html] view pla...
Amazon S3:https://amazonaws-china.com/cn/s3/faqs/
Amazon S3 是一种对象存储,专为从 Internet 上的任意位置存储和检索任意数量的数据而构建。它是一种简单的存储服务,以非常低的成本提供极其持久、高度可用并可无限扩展的数据存储基础设施。
Amazon S3 提供一个简单的 Web 服务界面,使用该界面,您...
function uploadFile(file) {
const CHUNK_SIZE = 1024 * 1024 * 5; // 5MB
const bucketName = 'my-bucket';
const s3 = new AWS.S3();
const fileSize = file.size;
const fileName = file.name;
const uploadId = localStorage.getItem('uploadId') || null;
const parts = [];
let loaded = 0;
if (!uploadId) {
// 新建上传任务
s3.createMultipartUpload({
Bucket: bucketName,
Key: fileName,
}, (err, data) => {
if (err) {
console.error(err);
return;
uploadId = data.UploadId;
localStorage.setItem('uploadId', uploadId);
uploadPart(1, 0);
} else {
// 恢复上传任务
s3.listParts({
Bucket: bucketName,
Key: fileName,
UploadId: uploadId,
}, (err, data) => {
if (err) {
console.error(err);
return;
data.Parts.forEach((part) => {
parts[part.PartNumber - 1] = {
ETag: part.ETag,
PartNumber: part.PartNumber,
loaded += part.Size;
uploadPart(parts.length + 1, loaded);
function uploadPart(partNumber, start) {
const end = Math.min(start + CHUNK_SIZE, fileSize);
const chunk = file.slice(start, end);
const params = {
Body: chunk,
Bucket: bucketName,
Key: fileName,
PartNumber: partNumber,
UploadId: uploadId,
s3.uploadPart(params, (err, data) => {
if (err) {
console.error(err);
return;
parts[partNumber - 1] = {
ETag: data.ETag,
PartNumber: partNumber,
loaded += chunk.size;
if (end === fileSize) {
completeUpload();
} else {
uploadPart(partNumber + 1, end);
function completeUpload() {
s3.completeMultipartUpload({
Bucket: bucketName,
Key: fileName,
UploadId: uploadId,
MultipartUpload: {
Parts: parts,
}, (err, data) => {
if (err) {
console.error(err);
return;
localStorage.removeItem('uploadId');
console.log(data);
后端代码:
```java
@RestController
public class S3Controller {
private final AmazonS3 s3Client;
@Autowired
public S3Controller(AmazonS3 s3Client) {
this.s3Client = s3Client;
@PostMapping("/upload")
public void upload(@RequestParam String fileName,
@RequestParam String uploadId,
@RequestParam(required = false) Integer partNumber,
@RequestParam(required = false) String eTag,
@RequestParam(required = false) MultipartFile file) throws IOException {
if (file != null && !file.isEmpty()) {
s3Client.uploadPart(new UploadPartRequest()
.withBucketName("my-bucket")
.withKey(fileName)
.withPartNumber(partNumber)
.withUploadId(uploadId)
.withInputStream(file.getInputStream())
.withPartSize(file.getSize()));
} else {
s3Client.completeMultipartUpload(new CompleteMultipartUploadRequest()
.withBucketName("my-bucket")
.withKey(fileName)
.withUploadId(uploadId)
.withPartETags(Collections.singletonList(new PartETag(partNumber, eTag))));
@PostMapping("/create")
public String create(@RequestParam String fileName) {
InitiateMultipartUploadResult result = s3Client.initiateMultipartUpload(new InitiateMultipartUploadRequest("my-bucket", fileName));
return result.getUploadId();
@GetMapping("/list")
public List<MultipartUpload> list() {
return s3Client.listMultipartUploads(new ListMultipartUploadsRequest("my-bucket")).getMultipartUploads();
在这个示例代码中,我们使用AWS SDK for Java操作Amazon S3服务。前端代码负责将文件分成多个部分进行上传,后端代码负责接收并存储每个部分,并在最后将所有部分合并成一个完整的文件。通过使用AWS SDK提供的分块上传接口,我们可以轻松地实现断点续传功能。