Shi*_*jil 5 android file-upload amazon-s3 pre-signed-url
我正在尝试使用从服务器端(用 python 编码)应用程序生成的签名 URL 将视频文件从 android 应用程序上传到 S3 服务器中的存储桶。我们正在向签名的 URL 发出 PUT 请求,但我们得到了
connection reset by peer exception.
但是当我在 POSTMAN REST CLIENT 上尝试相同的 URL 时,会收到一条成功消息。任何帮助将不胜感激。
使用Retrofit HTTP 客户端库完成此操作,它成功地将文件上传到 Amazon s3 服务器。
代码:
public interface UploadService {
String BASE_URL = "https://bucket.s3.amazonaws.com/folder";
/**
* @param url :signed s3 url string after 'BASE_URL'.
* @param file :file to upload,( usage: new TypedFile("mp4", videoFile);.
* @param cb :callback.
*/
@PUT("/{url}")
void uploadFile(@Path(value = "url", encode=false) String url, @Body() TypedFile file, Callback<String> cb);
}
Run Code Online (Sandbox Code Playgroud)
服务等级
public final class ServiceGenerator {
private ServiceGenerator() {
}
public static <S> S createService(Class<S> serviceClass, String baseUrl) {
return createService(serviceClass, baseUrl, null, null);
}
public static <S> S createService(Class<S> serviceClass, String baseUrl, final String accessToken, final String tokenType) {
class MyErrorHandler implements ErrorHandler {
@Override public Throwable handleError(RetrofitError cause) {
return cause;
}
}
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.registerTypeAdapter(Date.class, new DateTypeAdapter())
.disableHtmlEscaping()
.create();
RestAdapter.Builder builder = new RestAdapter.Builder()
.setEndpoint(baseUrl)
.setClient(new OkClient(new OkHttpClient()))
.setErrorHandler(new MyErrorHandler())
.setLogLevel(RestAdapter.LogLevel.FULL)
.setConverter(new GsonConverter(gson));
if (accessToken != null) {
builder.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(RequestFacade request) {
request.addHeader("Accept", "application/json;versions=1");
request.addHeader("Authorization", tokenType +
" " + accessToken);
}
});
}
RestAdapter adapter = builder.build();
return adapter.create(serviceClass);
}
Run Code Online (Sandbox Code Playgroud)
并使用:
UploadService uploadService = ServiceGenerator.createService(UploadService.class,UploadService.BASE_URL);
uploadService.uploadFile(remUrl,typedFile,new CallbackInstance());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2602 次 |
| 最近记录: |