• Kotlin-Android 开发日志


    需求:

    完成一个注册页面,要求可以上传头像。

    遇到的问题:

    1、对于kotlin中访问Android图片库的方法并不熟悉;

    2、对于bitmap图像处理的方法并不清除;

    3、基于虚拟机的桥接方式,尝试多次依然失败;

    4、nodejs-express端对于multidata-from类型数据的解析方式并不熟悉;

    5、对于nodejs-express静态资源的访问;

    解决问题:

    问题1、2,在多方查询资料之后,了解了kotlin当中访问图片库的方法,这里给出替代吗和注释以供备份。

    Photo.setOnClickListener {
                /**
                 * 通过intent方法来传递需要获取的文件信息
                 */
                val intent = Intent()
                intent.action = Intent.ACTION_GET_CONTENT
    intent.type
    = "image/*" startActivityForResult(intent, 111) } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { /** * 重载函数,依据resultCode的值来处理获得数据 * resultCode的值由自己设定,可以前后对应即可 */ super.onActivityResult(requestCode, resultCode, data) when (requestCode) { 111 -> { /** * 由于Data传回的是一个uri值,所以需要通过这个值来获取对应的图片信息 * 以下代码参考自网络 */ bitmap = MediaStore.Images.Media.getBitmap( this.getContentResolver(), data?.data); /** * 通过resizeImage压缩图片 * 其中涉及到dp单位到px单位的转换运算 * 由于在前端布局使用的是dp,而对于图片使用的是像素单位的压缩运算 * 所以需要进行换算 */ bitmap = resizeImage(bitmap, 150 * this.resources.displayMetrics.density, 150 * this.resources.displayMetrics.density) Photo.setImageBitmap(bitmap) } } } fun resizeImage(bitmap: Bitmap, Float, height: Float): Bitmap { val bmpWidth = bitmap.width val bmpHeight = bitmap.height val scaleWidth = width.toFloat() / bmpWidth val scaleHeight = height.toFloat() / bmpHeight val matrix = Matrix() matrix.postScale(scaleWidth, scaleHeight) return Bitmap.createBitmap(bitmap, 0, 0, bmpWidth, bmpHeight, matrix, true) }

    3、虚拟机的桥接过程

    由于对于桥接模式的具体原理并不清楚,一直认为此时虚拟需要访问的主机ip是‘10.0.2.2’

    但是实际上无法使用,最后参看了官方的文档,在终端中使用netcfg命令获得了当前Android虚拟机的ip

    但是在获得IP之后,发现虚拟机无法ping通主机,而主机可以ping通虚拟机,说明本机防火墙未关闭

    尝试之后,问题成功解决。

    4、nodejs-express对于multidata-from的数据解析

    查询资料之后,得知了‘formiable’这个中间件,于是对于使用方法进行了学习,以下给出代码。

    //创建套件
        var form = new formidable.IncomingForm();
        //设置文件上传存放地址,在这里配置了本地文件的默认保存位置,
        //此时文件名称是一个upload开头的随机字符串
        form.uploadDir = "./uploads";
        //执行里面的回调函数的时候,表单已经全部接收完毕了。
        form.parse(req, function(err, fields, files) {
            
            for(key in files)
            {
                /**
                    遍历整个文件对象,将upload——XXXX格式的文件名称修改为自己需要的名称
                    在这里由于我在前端中传回了一个名称,所有就修改为这个名称
                **/
                let file = files[key]
                fs.rename('.//'+file['path'], './/uploads//' + file['name'], err=>{
                    if(err) console.log(err)
                })
            }
            
            
        });

    5、nodejs-express静态资源的访问

    这个问题在很久之前就已经碰到过,但是对于具体的代码还是不太熟悉,这里给出记录。

    app.use('/uploads',express.static('./uploads'));
    第一个参数表示路由地址
    第二个参数表示本地文件夹的路径
  • 相关阅读:
    HTML DOM 06 节点关系
    HTML DOM 05 事件(三)
    HTML DOM 05 事件(二)
    HTML DOM 05 事件(一)
    html DOM 04 样式
    html DOM 03 节点的属性
    html DOM 02 获取节点
    html DOM 01 节点概念
    JavaScript 29 计时器
    JavaScript 28 弹出框
  • 原文地址:https://www.cnblogs.com/loenvom/p/14204663.html
Copyright © 2020-2023  润新知