起因
ビジネスニーズ、合理化するための情報ニーズの会社の人事ファイルへの管理は、PHPサーバーのスタッフにアップロード履歴書と写真IDカードの写真を必要とする(不確実性のために従業員が画像の欠落をアップロードする際に、マルチマップのアップロードを選択)
PS:データベースが私に与えている、私は実装を担当していますし、インターフェイスに写真をアップロードするには、Androidのインターフェースを終了し、インターフェースは、データベース内のデータに追加されます
達成すべきデータベースフィールドの影響:
(そのような私のimgフィールドなど)指定されたフィールドでのアップロード画像は、いくつかのカンマで分割されますどのくらいです
スルー
シングル画像アップロードPHPおよびインタフェース
騒ぎビビは:(直接起動I前記画像の端のAndroidリファレンスセレクション) - >ここに入力したチュートリアル画像模造マイクロチャネルセレクタ効果が詳細に
選択した画像効果のレンダリングが詳細に下記のリンクを参照しています達成
レンダリング:
特定のコードの実装:
アンドロイド側:
private static final int REQUEST_SELECT_IMAGES_CODE = 0x01;
private ArrayList<String> mImagePathf;
//点击图片上传button点击事件的业务处理
binding.starffRecordZssc.setOnClickListener(new View.OnClickListener() {//证书上传
@Override
public void onClick(View v) {
ImagePicker.getInstance()
.setTitle("标题")//设置标题
.showCamera(true)//设置是否显示拍照按钮
.showImage(true)//设置是否展示图片
.showVideo(true)//设置是否展示视频
.setMaxCount(1)//设置最大选择图片数目(默认为1,单选)
.setSingleType(true)//设置图片视频不能同时选择
.setImagePaths(mImagePathf)//设置历史选择记录
.setImageLoader(new GlideLoader())//设置自定义图片加载器
.start(StarffRecordAdd.this, REQUEST_SELECT_IMAGES_CODE);//REQEST_SELECT_IMAGES_CODE为Intent调用的requestCode
}
});
//选择图片后的回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_SELECT_IMAGES_CODE && resultCode == RESULT_OK) {
mImagePathf =data.getStringArrayListExtra(ImagePicker.EXTRA_SELECT_IMAGES);
Bitmap bm = BitmapFactory.decodeFile(mImagePathf.get(0));//设置加载第一个图片
String img = ChangeBase.bitmapToBase64(bm);//将图片转换为Base64的格式 准备往接口中发送
}
}
絵は、Base64クラスに変換します。
public class ChangeBase {
public static String bitmapToBase64(Bitmap bitmap) {
// 要返回的字符串
String reslut = null;
ByteArrayOutputStream baos = null;
try {
if (bitmap != null) {
baos = new ByteArrayOutputStream();
/**
* 压缩只对保存有效果bitmap还是原来的大小
*/
bitmap.compress(Bitmap.CompressFormat.JPEG, 30, baos);
try {
baos.flush();
} catch (IOException e) {
e.printStackTrace();
}
baos.close();
// 转换为字节数组
byte[] byteArray = baos.toByteArray();
// 转换为字符串
reslut = Base64.encodeToString(byteArray, Base64.DEFAULT);
Log.i("sss",reslut);
} else {
return null;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (baos != null) {
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return reslut;
}
}
[OK]を、ので、Androidのクライアントでも取得
し、我々はしてアップロードPHPインターフェース側の単一のビューを達成するために見てみましょう
public function test(){
$model = D('Atest');
$data = array();
$jsonarr = array();
$data['img'] = I('post.img');
$name=time();
if(!empty($data['img'])){
//目录
$rootPath = './Public/data/hr/xuelizhengshu/';
$path = 'data/hr/xuelizhengshu/';//文件上传子目录
$data['img']=base64_decode($data['img']);
file_put_contents($rootPath.$name.'.jpg',$data['img']);
$data['img']=$path.$name.'.jpg';
}
$datalist=$model->add($data);
if($datalist){
$jsonarr['state'] = "access";
$jsonarr['date'] = $datalist;
}
header('Content-Type:text/html; charset=utf-8');
exit(json_encode($jsonarr,JSON_UNESCAPED_UNICODE));
}
[OK]その後、唯一のAndroidクライアントインターフェイスでインターフェイスに送信IMGする必要がありますし、このような当社のデータベースにデータを書き込みます
マルチ画像のアップロードPHPインターフェース
マルチ単一の画像のアップロード画像とアップロードのアイデアほとんど
のAndroidクライアントの実装:
private static final int REQUEST_SELECT_IMAGES_SECOND = 0x02;
private ArrayList<String> mImagePaths;
private Map<String,String> jianli;
private int shenfencount = 0;
//多图片上传button的点击事件处理
binding.starffRecordSfzfyj.setOnClickListener(new View.OnClickListener() {//身份证复印件
@Override
public void onClick(View v) {
ImagePicker.getInstance()
.setTitle("标题")//设置标题
.showCamera(true)//设置是否显示拍照按钮
.showImage(true)//设置是否展示图片
.showVideo(true)//设置是否展示视频
.setMaxCount(5)//设置最大选择图片数目(默认为1,单选)
.setSingleType(true)//设置图片视频不能同时选择
.setImagePaths(mImagePaths)//设置历史选择记录
.setImageLoader(new GlideLoader())//设置自定义图片加载器
.start(StarffRecordAdd.this, REQUEST_SELECT_IMAGES_SECOND);//REQEST_SELECT_IMAGES_CODE为Intent调用的requestCode
}
});
//回调处理
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_SELECT_IMAGES_SECOND && resultCode == RESULT_OK) {
mImagePaths = data.getStringArrayListExtra(ImagePicker.EXTRA_SELECT_IMAGES);
jianli = new HashMap<>();
jianli.clear();
for(int i=0;i<mImagePaths.size();i++){
jianli.put("jianliimg"+i,ChangeBase.bitmapToBase64(BitmapFactory.decodeFile(mImagePaths.get(i))));
}
shenfencount= mImagePaths.size();
}
}
マルチ画像アップロード難しさは、引数の最後の番号アップロードしたい画像の数を決定し、送信することができない
私はレトロフィットネットワーク要求を使用して、私が使用して組み込み変数パラメータ@FieldMap
要求のネットワークパラメータ
//这里我使用的是kotlin的写的
@FormUrlEncoded
@POST("Hrmdanganjson/add")//人员档案添加数据
fun getrecordaddadd(@Field("shenfencount") shenfencount:Int, @FieldMap jianli:Map<String,String>)
我々は唯一の数に私たちの画像を必要とし、Base64で入るので、[OK]を、すべての写真は、このエンド我々アンドリュースへのインタフェースに送信され、操作の終わりです
マルチ画像のアップロードインターフェースをPHP:
public function test(){
$model = D('Atest');
$data = array();
$jsonarr = array();
$shefenzhengcount = I('post.shenfencount');
$name=time();
for ($x=0; $x<$shefenzhengcount; $x++) {//拿到身份证上传图片的个数 ->3
$current = I('post.jianliimg'.$x);
$name+=2;
$rootPath = './Public/data/hr/jianlishangchuan/';
$path = 'data/hr/jianlishangchuan/';
$current=base64_decode($current);
file_put_contents($rootPath.$name.'.jpg',$current);
$shuzu[]=$path.$name.'.jpg';
}
$data['jianliimg']=implode(',',$shuzu);
$datalist=$model->add($data);
if($datalist){
$jsonarr['state'] = "access";
$jsonarr['date'] = $datalist;
}
header('Content-Type:text/html; charset=utf-8');
exit(json_encode($jsonarr,JSON_UNESCAPED_UNICODE));
}
我々のキーフィールドに対応する画像フィールドを一時的に記憶するためのループ画像の数に応じて、PHPにアンドロイドのHashMapの終わりで
、次に外側ループの配列にした後、良好なデータの各反復ループにおける当社のデータベースには、よりコンマよで区切ることを忘れないでください、この配列を受け取るために、そのフィールドをマッピング保持しています
[OK]を、この最後の模造マイクロチャネルセレクタの画像効果を達成、覚えている私のhttps://blog.csdn.net/yuhang01/article/details/102398127を参照してください
詳細な使用方法があります
結果
各エフェクトは、古い鉄を殺すために、プログラマを達成することになります私のために困難でした