Android Question Problems with okhttputils2 version 3.0

mevial

Member
Licensed User
Longtime User
My old app was working well after compiling with b4a 11.0. But after recompile this app with b4a 11.5 or b4a 11.8, mya app can't upload file to s3 server. I use class aws_s3 version 1.7
[CODE lang="b4x" title="sending file"] If s3Map.IsInitialized Then
If CurFileName.Contains(".mp4") Or CurFileName.Contains("Answers") Then
FileToSend=CurFileName
Log("s3:" & CurFileName)
Dim s3Set As Map
Dim wfidPos As Int=CurFileName.IndexOf("-")
Dim wfidStr As String=""
If wfidPos>0 Then
wfidStr=CurFileName.SubString2(0, wfidPos)
s3Set=s3Map.Get(wfidStr)
Else
ToastMessageShow("wrong filename",False)
End If
Dim s3 As AWS_S3
s3.Initialize
s3.AWS_URI_Is_Path_Style = True
s3.AWS_Region = "ru-1"
s3.AWS_Access_Key_ID = s3Set.Get("USER")
s3.AWS_Secret_Access_Key = s3Set.Get("KEY")
s3.AWS_End_Point = s3Set.Get("HOST")
s3.AWS_S3_Bucket_Name = s3Set.Get("BUCKET")

s3.AWS_S3_File_Name = wfidStr & "/" & CurFileName
s3.AWS_S3_HttpMethod = "PUT"

s3.AWS_S3_Query_map.Initialize
s3.AWS_S3_Query_map.Clear

'************************************************************************************
Private wrk_in As InputStream
wrk_in = File.OpenInput(File.DirInternal,CurFileName)
Private wrk_out As OutputStream
wrk_out.InitializeToBytesArray(1000)
File.Copy2(wrk_in, wrk_out)
wrk_in.Close
wrk_out.Close
s3.AWS_S3_Payload = wrk_out.ToBytesArray

s3.AWS_S3_OtherHeader_map.Initialize
s3.AWS_S3_OtherHeader_map.Clear
s3.AWS_S3_OtherHeader_map.Put("Content-Type", "application/x-www-form-urlencoded")
s3.AWS_S3_OtherHeader_map.Put("Content-Length", NumberFormat2(s3.AWS_S3_Payload.Length, 1, 0, 0, False))
s3.AWS_S3_OtherHeader_map.Put("x-amz-meta-author", "me")
s3.AWS_S3_OtherHeader_map.Put("Expect", "100-continue")

'Set up httpjob
AWS_job.Initialize("AWS_job", Me)
AWS_job.PutBytes(s3.URI, s3.AWS_S3_Payload)

'Retrieve full header map
Private wk_hdr_map As Map
wk_hdr_map.Initialize
wk_hdr_map = s3.FullHeaderMap

Private wrk_ptr As Int

For wrk_ptr = 0 To wk_hdr_map.Size - 1

'If not host header...
If wk_hdr_map.GetKeyAt(wrk_ptr) <> "host" Then

'Add it to httpjob
AWS_job.GetRequest.SetHeader(wk_hdr_map.GetKeyAt(wrk_ptr), wk_hdr_map.GetValueAt(wrk_ptr))

End If

Next

AWS_job.GetRequest.SetHeader("Authorization", s3.Authorization)
End If
[/CODE]

[CODE lang="b4x" title="There i have timeout error"] Case "AWS_job"
If Job.Success = True Then
SentFileCount=SentFileCount+1
ToastMessageShow("Sent " & SentFileCount & " backed files",False)
If FileToSend.Contains(".mp4") Then
File.Delete(File.DirInternal,FileToSend)
CallSubDelayed(Me,"FindAndSendFile")
End If
Else
Log("Error: " & Job.ErrorMessage)
End If
[/CODE]
ResponseError. Reason: java.net.SocketTimeoutException: timeout, Response: Error: java.net.SocketTimeoutException: timeout
 
There are many bad practices in this code.

I was able to send the file with this code:
Code:
s3.AWS_S3_OtherHeader_map.Put("x-amz-meta-author", "me")

    'Set up httpjob
    AWS_job.Initialize("AWS_job", Me)
    AWS_job.PutBytes(s3.URI, s3.AWS_S3_Payload)
    'Retrieve full header map
    Private wk_hdr_map As Map
    wk_hdr_map.Initialize
    wk_hdr_map = s3.FullHeaderMap

    Private wrk_ptr As Int
    'For each key, value pair of full header map...
    For wrk_ptr = 0 To wk_hdr_map.Size - 1
        If wk_hdr_map.GetKeyAt(wrk_ptr) <> "host" Then
            AWS_job.GetRequest.SetHeader(wk_hdr_map.GetKeyAt(wrk_ptr), wk_hdr_map.GetValueAt(wrk_ptr))
        End If
    Next

    '            Log(S3.Authorization)
    AWS_job.GetRequest.SetHeader("Authorization", s3.Authorization)
    AWS_job.GetRequest.SetContentType("application/x-www-form-urlencoded")
 
Upvote 0
I didn't understand, I need to add to the code
B4X:
AWS_job.GetRequest.SetContentType("application/x-www-form-urlencoded")
or also I need to remove from my code
B4X:
s3.AWS_S3_OtherHeader_map.Put("Expect", "100-continue")
?
Or I need to remove all other strings with
B4X:
s3.AWS_S3_OtherHeader_map.Put
?
 
Upvote 0
Thank You for this solution. I checked each of my questions, and only removing code
B4X:
s3.AWS_S3_OtherHeader_map.Put("Expect", "100-continue")
fixes this error. I don't know what doing this header, and for what it was need in the example for library. :(
 
Upvote 0
Back
Top