-
Notifications
You must be signed in to change notification settings - Fork 549
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Unable to upload to S3 - SocketTimeoutException #37
Comments
The exception shows S3 closes the socket while the client tries to write data into the pipe. It can happen if the request is invalid and is rejected by S3. Would you please share how you use Transfer manager? Do you use OkHttp? A code snippet will help. |
Hi @fosterzhang, thanks for fast reply. Here's how I setup a static TransferManager: public class S3Manager {
// For single instance
private static AWSCredentialsProvider sCredProvider;
// Private attributes
private static AmazonS3Client s3Client;
private static TransferManager transferManager;
public static AWSCredentialsProvider getCredentialProvider() {
if (sCredProvider == null) {
try {
sCredProvider = new CognitoCachingCredentialsProvider(
App.getInstance(),
"xxxxxxx",
"xxxxxxx",
"xxxxxxx",
null,
Regions.US_EAST_1);
sCredProvider.refresh();
} catch (Exception e) {
LogHelper.log(e);
}
}
return sCredProvider;
}
public static TransferManager getTransferManager() {
if (transferManager == null) setup();
return transferManager;
}
public static void setup() {
if (s3Client == null) {
initS3Client();
}
}
// Initialize AWS S3 Client
private static AmazonS3Client initS3Client() {
if (s3Client == null) {
AWSCredentialsProvider credProvider = getCredentialProvider();
if (credProvider == null) return null;
// Turn off HTTPS because our objects are already encrypted
ClientConfiguration s3Config = new ClientConfiguration();
s3Config.setProtocol(Protocol.HTTP);
s3Client = new AmazonS3Client(credProvider, s3Config);
// Setup TransferManager from s3Client
if (s3Client != null) {
transferManager = new TransferManager(s3Client);
}
}
return s3Client;
}
} Then I use this TransferManager to upload file: TransferManager transferManager = S3Manager.getTransferManager();
Upload upload = transferManager.upload(bucket, key, file); |
Hmm, interesting. It should use the default UrlHttpClient. But I don't understand why I see com.android.okio which belongs to OkHttp in the stacktrace. Do you run it on a real device or an emulator? |
I tested on real device Google Nexus 5, Android 5.0.1 |
And btw I don't have any dependency with OkHttp in my app |
Thanks for the information. Not sure if it's a platform issue. I will try it on Android 5.0.1. BTW, would you please test your code on early API versions? |
I just tested again on Samsung S4 Android 4.4.2, has the same issue. The stacktrace is as below:
|
I tested it on emulator and couldn't reproduce the problem. I will test it on real device shortly. Would you please tell me approximate size of the file you upload? Just want to figure out if it's caused by multipart upload. |
It happened with both photo and video with various sizes, from 1mb to 13mb |
Sorry for the delay. I tested s3 transfer manager on latest 5.1 (level 22) emulator, 4.1.2 (level 16) samsung galaxy tab3, and 4.4.2 (level 19) samsung galaxy tab3. I tried different file sizes as well, but I couldn't reproduce the problem. Would you please share your code sample that can reliably reproduce the problem? |
Hi @fosterzhang it's weird that with the same code and test on same device, I can upload to S3 today with no exception... Maybe some changes on server side? Not sure but let's close this issue for now and I will monitor it in the future. |
Cool. Feel free to reopen this issue when it comes back to you. |
Just a comment if people reach this question, I was having the same errors until I attached policies to my user that would allow it to upload to S3 in the IAM console. After doing so, I no longer had the Broken Pipe Error |
Hi @relisher - how do we attach policies. Is it from the code from the android app or from the aws console . Because i an also having this broken pipe issue |
@swats1010 here is the official documentation of how to do it from the CLI, and you can also do it from the aws console: |
I also had this issue and I resolved it while going through multiple stackoverflow /github /aws doc pages. leaving a link to my documentation below for whomsoever may need it. |
Hi,
I just upgrade the android SDK to version 2.2.0, but unable to upload file to S3. Downloading and deleting file works, but uploading always has the exception below. We are using TransferManager and unauthenticated Cognito to connect to S3.
Previous version works, not sure any changes we need to be aware of when upgrading to 2.2.0?
Thanks
The text was updated successfully, but these errors were encountered: