您的位置:首页 > 移动开发 > Android开发

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

2015-04-27 16:21 579 查看

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

关于android上传图片视频音频到rails后台服务器
android客户端实现图片视频音频采集
获取相册图片

拍照

录像

录制音频

将图片等文件上传

rails后台接收文件
rails后台如何接收数据

总结
app客户端项目地址

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.ge
4000
t("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后台项目地址

参考资料

Ruby on Rails 指南

Ruby on Rails 快速开发 Web 应用程序

Ruby on Rails 教程

AsyncHttpClient框架传输

Volley通信框架

Volley异步加载数据

FastJson简单使用

Gson的使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息