我正在阅读Amazon S3文档,但我有点迷失......
实际上,用户将文件上传到Amazon S3,然后,我将其复制到EC2,处理它,返回S3,用户可以下载它。
当我处理文件时,我需要创建一个html文件,我需要在Amazon S3中创建,但我不知道如何直接在S3上创建这个文件。现在,我在EC2上创建一个文件,然后将其移动到S3。
要创建此HTML,请使用:
TextWriter tw = new StreamWriter(pathFile);
tw.WriteLine(page);
tw.Close();
其中 page 是一个包含html代码的字符串,而pathFile是:string outputWap = Server.MapPath("~/xxx.html");
我正在使用ASP.NET MVC 2.
感谢您的帮助。
问候。
答案 0 :(得分:3)
您目前无法创建(不要与上传当然是完全可行的)混淆s3中的文件(至少使用.net SDK)。如果您无法控制本地文件系统(空间限制,权限或其他),则可以在内存中创建文件,然后将该流上载到s3,就好像它是本地存储在磁盘上的文件一样。 c#的代码如下:
public static bool CreateFile()
{
// Create file in memory
UnicodeEncoding uniEncoding = new UnicodeEncoding();
// Create the data to write to the stream.
byte[] memstring = uniEncoding.GetBytes("you're file content here");
using (MemoryStream memStream = new MemoryStream(100))
{
memStream.Write(memstring, 0, memstring.Length);
// upload to s3
try
{
AmazonS3Client s3 = new AmazonS3Client(RegionEndpoint.USEast1);
using (Amazon.S3.Transfer.TransferUtility tranUtility =
new Amazon.S3.Transfer.TransferUtility(s3))
{
tranUtility.Upload(memStream, bucketname, keyname);
return true;
}
}
catch (Exception ex)
{
return false;
}
}
}
答案 1 :(得分:1)
如果您使用的是适用于.Net的AWS开发工具包,您可以尝试使用InputStream
代替FilePath
而不是{{1}}使用PutObjectRequest
,尽管我自己没有尝试过。
否则,我真的没有看到你目前正在做的方式有什么问题。
答案 2 :(得分:0)
请阅读以下文章,我认为它们是相关的:
http://doc.s3.amazonaws.com/proposals/post.html http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html
问候,阿肖克
答案 3 :(得分:0)
我正在这样做:
public bool Upload(string filePath, Stream inputStream, double contentLength, string contentType)
{
try
{
var request = new PutObjectRequest();
string _bucketName = "";
request.BucketName = _bucketName;
request.CannedACL = S3CannedACL.PublicRead;
request.InputStream = inputStream;
request.Key = filePath;
request.Headers.ContentType = contentType;
PutObjectResponse response = _amazonS3Client.PutObject(request);
return true;
}catch(Exception ex)
{
return false;
}
}
注意:我可以使用以下参数传递Stream参数:
HttpPostedFileBase file = this.Request.Files[0];
file.Stream;