首页 > 解决方案 > 使用 url 下载图像并保存到内部存储

问题描述

我尝试了不同的方法。但我仍然无法将图像保存到指定位置。我不知道有什么问题。需要一些建议。路径未创建,图像未保存。

class DownloadAndSaveImage(context: Context) : AsyncTask<String, Unit, Unit>() {


    private var mContext: WeakReference<Context> = WeakReference(context)
    override fun doInBackground(vararg params: String?) {
        val url = params[0]
        val requestOptions = RequestOptions().override(100)
            .downsample(DownsampleStrategy.CENTER_INSIDE)
            .skipMemoryCache(true)
            .diskCacheStrategy(DiskCacheStrategy.NONE)

        mContext.get()?.let {
            val bitmap = Glide.with(it)
                .asBitmap()
                .load(url)
                .apply(requestOptions)
                .submit()
                .get()

            try {
                val path = File(Environment.DIRECTORY_DCIM)
                val dir =path.absolutePath
                val file=File(dir+"/EAcademy","schoolImage.jpg")
                if (!file.exists()) {
                    file.mkdir()
                }
                val out = FileOutputStream(file)
                bitmap.compress(Bitmap.CompressFormat.JPEG, 85, out)
                out.flush()
                out.close()
                Log.i("Tribhuwan", "Saved Image")
            } catch (e: Exception) {
                Log.i("Tribhuwan", "Failed to save")
            }
        }
    }


}

标签: androidkotlin

解决方案


由于您使用的是 file.mkdir() 所以它将创建 schoolImage.jpg 目录而不是文件。你可以这样做

val path = File(Environment.DIRECTORY_DCIM)
            val dir =path.absolutePath
            val folder=File(dir+"/EAcademy")

            if(!folder.exists()){
                folder.mkdirs()
            }
            val file = File(folder, "schoolImage.jpg")

推荐阅读