您的位置:首页 > 其它

测试在阿里云服务器上是否可以在指定文件后添加数据生成新文件

2014-09-10 10:47 417 查看
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.InteropServices;

using Aliyun.OpenServices.OpenStorageService;

using System.IO;

using System.Collections;

namespace TestAddFile

{

class Program

{

static void ReadFile(string DownLoadPath, OssClient client,string bucketName,string key)

{

GetObjectRequest ReadRequest = new GetObjectRequest(bucketName, key);

FileStream s = new FileStream(DownLoadPath,FileMode.OpenOrCreate);

client.GetObject(ReadRequest,s);

}

static void Main(string[] args)

{

/////////////////////////////测试代码/////////////////////////////////////////////

string accessId = "NmBlLQLtoPjNy1fV";

string accessKey = "Ofp39rtQZPgzlxPGgtSE9MTWtPTXvW";

string strFullFilePath = "D:\\MyFile\\VBR.mp3";

string strAddFilePath = "D:\\MyFile\\不是你的错.mp3";

OssClient client = new OssClient(accessId, accessKey);

string bucketName = "haolipeng";

string key = "AddFileEndTest.mp4";

//测试在尾部添加数据后的文件是否可以增加成功

//string path = "D:\\haolipeng1.mp4";

//ReadFile(path, client, bucketName, key);

//Console.WriteLine("下载完成");

//分块上传请求 (初始化状态)

InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, key);

InitiateMultipartUploadResult initResult = client.InitiateMultipartUpload(initRequest);

//设置每块5M

int partSize = 1024 * 512;

FileInfo partFile = new FileInfo(strFullFilePath);

// 获取分块数目

int partCount = (int)(partFile.Length / partSize);

bool bNoDivided = false;

if (partFile.Length % partSize != 0)

{

partCount++;

bNoDivided = true;

}

// 新建一个List保存每个分块上传后的ETag和PartNumber

List<PartETag> partETags = new List<PartETag>();

//分块上传

int i = 0;

for (i = 0; i < partCount; i++)

{

//当最后一块小于partSize时,不传数据

if (i == partCount - 1 && true == bNoDivided)

{

break;

}

// 获取文件流

FileStream fis = new FileStream(partFile.FullName, FileMode.Open);

//每块开始位置

long skipBytes = partSize * i;

fis.Position = skipBytes;

// fis.skip(skipBytes);

// 计算每个分块的大小

long size = partSize < partFile.Length - skipBytes ?

partSize : partFile.Length - skipBytes;

// 创建UploadPartRequest,上传分块

UploadPartRequest uploadPartRequest = new UploadPartRequest(bucketName, key, initResult.UploadId);

uploadPartRequest.InputStream = fis;

uploadPartRequest.PartSize = size;

uploadPartRequest.PartNumber = (i + 1);

UploadPartResult uploadPartResult = client.UploadPart(uploadPartRequest);

// 将返回的PartETag保存到List中

partETags.Add(uploadPartResult.PartETag);

//关闭文件

fis.Close();

}

Console.WriteLine("第一个文件上传成功");

////////////////////////////add//////////////////////////////////////////////

FileInfo addFile = new FileInfo(strAddFilePath);

int addCount = (int)(addFile.Length / partSize);

if (addFile.Length % partSize != 0)

{

addCount++;

}

List<PartETag> addETags = new List<PartETag>();

////////////////////////////add//////////////////////////////////////////////

////////////////////////////////add//////////////////////////////////////////

for (int j = 0; j < addCount; j++)

{

// 获取文件流

FileStream fis = new FileStream(addFile.FullName, FileMode.Open);

//每块开始位置

long skipBytes = partSize * j;

fis.Position = skipBytes;

// 计算每个分块的大小

long size = partSize < addFile.Length - skipBytes ?

partSize : addFile.Length - skipBytes;

// 创建UploadPartRequest,上传分块

UploadPartRequest uploadPartRequest = new UploadPartRequest(bucketName, key, initResult.UploadId);

uploadPartRequest.InputStream = fis;

uploadPartRequest.PartSize = size;

uploadPartRequest.PartNumber = (i + 1 + j);

UploadPartResult uploadPartResult = client.UploadPart(uploadPartRequest);

// 将返回的PartETag保存到List中

addETags.Add(uploadPartResult.PartETag);

//关闭文件

fis.Close();

}

Console.WriteLine("第二个文件上传成功");

////////////////////////////////add//////////////////////////////////////////

//分块上传(完成状态)

CompleteMultipartUploadRequest completeReq = new CompleteMultipartUploadRequest(bucketName, key, initResult.UploadId);

foreach (PartETag partETag in partETags)

{

completeReq.PartETags.Add(partETag);

}

foreach (PartETag partETag in addETags)

{

completeReq.PartETags.Add(partETag);

}

//完成分块上传

CompleteMultipartUploadResult completeResult = client.CompleteMultipartUpload(completeReq);

// 返回最终文件的MD5,用于用户进行校验

// Console.WriteLine(completeResult.ETag);

Console.WriteLine("文件整体合并成功");

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐