关于android上传图片,视频,音频到rails后台服务器

关于android上传图片,视频,音频到rails后台服务器


android客户端实现图片,视频,音频采集

我在项目中主要是调用系统接口,获取图片,拍照,录像,录制音频时使用MediaRecorder进行录制。

获取相册图片

调用系统相册:

Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT); //"android.intent.action.GET_CONTENT"
galleryIntent.setType("image/*"); 
//查看类型 String IMAGE_UNSPECIFIED = "image/*" ;
Intent wrapperGalleryIntent = Intent.createChooser(galleryIntent, null);
startActivityForResult(wrapperGalleryIntent, REQUEST_CODE_TAKE_GALLERY); 

拍照

调用系统相机拍照:

if (isHasSdcard()) 
{
//指定输出的文件
uploadGalleryFile = new File(file, imagePrefix + format.format(new Date()) + ".jpg");
}
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //"android.media.action.IMAGE_CAPTURE";
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(uploadGalleryFile));
startActivityForResult(cameraIntent, REQUEST_CODE_TAKE_CAMERA);

录像

调用系统相机录像:

if (isHasSdcard()) 
{
uploadVideoFile = new File(file, videoPrefix + format.format(new Date()) + ".3gp");
}
Intent videoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
videoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(uploadVideoFile));
startActivityForResult(videoIntent, REQUEST_CODE_TAKE_VIDEO);

录制音频

使用MediaRecorder录制音频:

private void startRecord() {
        if (hasSdcard()) {
            sdcardPath = new File(dir);
            try {
                recordPath = File.createTempFile(prefix, ".amr", sdcardPath); //三个参数分别为前缀、后缀、目录
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            Toast.makeText(activity, "未找到存储卡,无法存储", Toast.LENGTH_SHORT).show();
            return;
        }
        initRecorder();
        try {
            recorder.prepare();
            recorder.start();
            stateView.setText("正在录音...");
            btnStartRecord.setVisibility(View.GONE);
            btnStopRecord.setVisibility(View.VISIBLE);
            btnPlayRecord.setVisibility(View.GONE);
        } catch (Exception e) {
            e.printStackTrace();
        }
        btnStartRecord.setClickable(false);
        btnPlayRecord.setClickable(false);
        btnStopRecord.setClickable(true);
    }

将图片等文件上传

  • 这里提供一个根据uri找到指定文件的方法
    点击查看
  • 使用AsyncHttpClient请求将文件上传到服务器
    //    /*
    //    * 上传文件
    //    */
    @SuppressLint("ShowToast")
    public void upload(File file, Integer type) {
        RequestParams params = new RequestParams();
        try {
            params.put("doctor_id", UserInfo.user.getDoctor_id().toString());
            params.put("suffer_id", patientInfo.getId().toString());
            params.put("resource_type", type.toString());
            params.put("resource_size", UsedTools.generateFileSize(file));
            params.put("resource_category", category);
            params.put("resource_url", file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        String url = Configuration.newResourceUrl;
        AsyncHttpClient client = new AsyncHttpClient();
        client.post(url, params, new JsonHttpResponseHandler() {
            @SuppressLint("ShowToast")
            @Override
            public void onSuccess(JSONObject response) {
                try {
                    successResponse = response.get("success").toString();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                if (successResponse.equals("1")) {
                    Toast.makeText(UploadRecord.this, "上传成功", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(UploadRecord.this, "上传失败", Toast.LENGTH_LONG).show();
                }
            }

            @SuppressLint("ShowToast")
            @Override
            public void onFailure(int statusCode, Header[] headers,
                                  byte[] responseBody, Throwable error) {
                Toast.makeText(UploadRecord.this, "网络访问异常,请重试", Toast.LENGTH_LONG).show();

            }
        });
    }

rails后台接收文件

  • 使用rails开发框架,能够加快开发进度,省去很多麻烦。

  • 利用carrierwave插件能够实现图片等文件的上传。具体方法

rails后台如何接收数据

  • 首先,确保carrierwave的相关准备都完成,特别注意要在model中加入一下代码:
mount_uploader :doctor_url, DoctorUrlUploader
  • 然后,在controller中加入方法,实现图片的接收。例如更新用户头像:
#更新用户头像
def update_userPictureUrl
  @user = User.find(params[:doctor_id])
  @user.update_attributes(:doctor_url => params[:doctor_url])
  if @user.save
    doctor_url = @user.doctor_url.url
    json_str = "{'doctor_url':'#{IP}#{doctor_url}'}" #返回用户头像路径
    render json: json_str
  else
    render json: @user.errors
  end
end
  • 视频和音频的处理都可以通过同样的方法接收

总结

app客户端项目地址

rails后台项目地址

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值