我正在尝试将大小超过3 GB的文件上传到亚马逊当我上传大小很小的文件时,他们会愉快地上传 但是当我尝试上传大文件时,它会显示错误http 400
任何人都可以告诉我哪里出错或者我需要上传文件。 提前谢谢
public bool UploadFileDicom(HttpPostedFileBase file)
{
bool isSuccess = false;
try
{
string bucketName = Convert.ToString(WebConfigurationManager.AppSettings["iqcDicomBucket"]);
client = new AmazonS3Client(AWS_ACCESS_KEY, AWS_SECRET_KEY, Amazon.RegionEndpoint.USWest2);
var request = new PutObjectRequest()
{
BucketName = bucketName,
CannedACL = S3CannedACL.PublicRead,//PERMISSION TO FILE PUBLIC ACCESIBLE
Key = file.FileName,
InputStream = file.InputStream//SEND THE FILE STREAM
};
client.PutObject(request);
isSuccess = true;
}
catch (Exception ex)
{
logger.Error(DateTime.Now + "Error in GlobalComman.cs, CreateDocStatus_TraningAndValidation function: " + ex.Message);
throw ex;
}
return isSuccess;
}
答案 0 :(得分:1)
结帐this lib。它以可配置大小的块上传文件。由于您的要求是在浏览器中完成,这应该可行。
答案 1 :(得分:0)
首先,您不允许上传超过5GB的文件( 6gb MUST FAIL,但不是2gb文件):
但上传大文件可能会出现各种问题,因此,为避免单一上传出现问题,建议分段上传
上传部分对象 - 使用Multipart upload API,您可以上传大型对象,最高可达5 TB。
Multipart Upload API旨在改善较大对象的上传体验。您可以上传部分对象。这些对象部分可以独立,任意顺序和并行上载。您可以将Multipart Upload用于大小为5 MB到5 TB的对象。有关更多信息,请参阅使用分段上传上载对象。有关更多信息,请参阅使用分段上传API上传对象。
Check here 以下Java代码示例将文件IN PARTS上载到Amazon S3存储桶:
public class UploadObjectMultipartUploadUsingHighLevelAPI {
public static void main(String[] args) throws Exception {
String existingBucketName = "*** Provide existing bucket name ***";
String keyName = "*** Provide object key ***";
String filePath = "*** Path to and name of the file to upload ***";
TransferManager tm = new TransferManager(new ProfileCredentialsProvider());
System.out.println("Hello");
// TransferManager processes all transfers asynchronously,
// so this call will return immediately.
Upload upload = tm.upload(
existingBucketName, keyName, new File(filePath));
System.out.println("Hello2");
try {
// Or you can block and wait for the upload to finish
upload.waitForCompletion();
System.out.println("Upload complete.");
} catch (AmazonClientException amazonClientException) {
System.out.println("Unable to upload file, upload was aborted.");
amazonClientException.printStackTrace();
}
}
}
答案 2 :(得分:0)
@JordiCastilla关于S3 multipart和5GB阈值是正确的......但你的第一个问题是本地问题:
maxRequestLength="2147482624"
嗯。这大概是2 GiB。所以,当你说你的控制器没有触发时,这表明你的400错误甚至不是来自S3的问题所暗示的。您的本地配置导致浏览器的请求在飞行中被取消,因为它比您的本地配置允许的大。
您的第一步似乎是增加此配置值,请记住,当您跨越5GB阈值时,您随后还需要转换为分段上传到.3。
另外请记住,正在进行的请求也占用了服务器上的临时磁盘空间,因此将此值设置为已经很大(更不用说将其设置得更大)会让您面临风险拒绝服务攻击,虚假请求可能会耗尽您的临时空间来禁用您的站点。