Android Amazon S3上传。错误405

时间:2018-03-09 10:28:56

标签: java android amazon-web-services amazon-s3

我已经尝试了几天将Amazon S3连接到我的Android项目。我下载了示例" https://github.com/awslabs/aws-sdk-android-samples" " S3TransferUtilitySample"一切正常,我通过aws管理面板看到文件。 我复制到我的项目" Constants.java"使用工作设置,也复制" Util.java"没有变化。

我的项目的目的是从麦克风录制文件并将其传输到云端。 以下是应该实现此操作的单例:

public class RecorderHelper {
private static final String TAG = "UploadActivity";
private static TransferUtility sTransferUtility;
static private Util util;
static RecorderHelper singleton;
static Boolean RecordStateRecording;
private static MediaRecorder recorder;
private final String RECORD = Environment.getExternalStorageDirectory() + "/record.aac";
String fileName;

private RecorderHelper() {
}

public static RecorderHelper getSingleton(Context context) {
    if (singleton == null) {
        RecordStateRecording = false;
        singleton = new RecorderHelper();
        util = new Util();
        AmazonS3Client s3Client = util.getS3Client(context);
        sTransferUtility = util.getTransferUtility(context);
    }
    ;
    return singleton;
}

public void StopRecording() {
    try {
        if (RecordStateRecording) {
            recorder.stop();
            recorder.reset();
            recorder.release();
            AACTrackImpl aacTrack = new AACTrackImpl(new FileDataSourceImpl(RECORD));
            if (aacTrack.getSamples().size() > 1000) {
                CroppedTrack aacTrackShort = new CroppedTrack(aacTrack, aacTrack.getSamples().size() - 1000, aacTrack.getSamples().size());
                Movie movie = new Movie();
                movie.addTrack(aacTrackShort);
                Container mp4file = new DefaultMp4Builder().build(movie);
                FileChannel fc = new FileOutputStream(new File(fileName)).getChannel();
                mp4file.writeContainer(fc);
                fc.close();
                aacTrackShort.close();
                aacTrack.close();
            } else {
                aacTrack.close();
            }
        }

        File file = new File(RECORD);
        TransferObserver observer = sTransferUtility.upload(Constants.BUCKET_NAME, file.getName(),
                file);
        observer.setTransferListener(new UploadListener());

    } catch (Exception e) {
        Log.e("RECORD", e.getMessage());
    }
    RecordStateRecording = false;
}

public void StartNewRecording(String UUID) {
    StopRecording();
    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    fileName = Environment.getExternalStorageDirectory() + "/" + UUID + ".aac";
    recorder.setOutputFile(RECORD);
    try {
        recorder.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    recorder.start();   // Recording is now started
    RecordStateRecording = true;
}

private class UploadListener implements TransferListener {

    // Simply updates the UI list when notified.
    @Override
    public void onError(int id, Exception e) {
        Log.e(TAG, "Error during upload: " + id, e);
    }

    @Override
    public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
        Log.d(TAG, String.format("onProgressChanged: %d, total: %d, current: %d",
                id, bytesTotal, bytesCurrent));
    }

    @Override
    public void onStateChanged(int id, TransferState newState) {
        Log.d(TAG, "onStateChanged: " + id + ", " + newState);
    }
}

}

但是,该文件不会出现在云中,并且监听器会告诉我405错误。这是全文。 谁能告诉我我做错了什么?

  

无法解组错误响应(尝试调用虚方法   ' boolean java.lang.String.equals(java.lang.Object)'在null对象上   参考)。响应代码:405,响应文本:

我正在使用最新的SDK: 编译' com.amazonaws:aws-android-sdk-s3:2.6。+' 不确定stacktrace是因为我只是收到一个关于传输失败的回调。 API 22

0 个答案:

没有答案