我有一个使用Django rest框架将其数据库与Django服务器同步的应用程序。我可以将图像上传到服务器。

问题是图像是从其他设备上传还是直接通过Web应用程序上传。当我尝试使用“自”过滤器重新同步时,它表明它正在调用GET图像(不是在当前设备上制作),但从未保存过。我发现解决此问题的唯一方法是清除android缓存并启动与服务器的初始同步。

我正在使用Picasso将图像加载到新的Target中:

private void saveImage(final String url){
    Picasso.get().load(url).into(new Target() {
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
            try {
                String root = Environment.getExternalStorageDirectory().toString();
                File directory = new File(root + "/instrumentImages");
                if (!directory.exists()) {
                    directory.mkdirs();
                }
                String fileName = url.substring( url.lastIndexOf('/')+1, url.length() );
                //String fileNameWithoutExtn = fileName.substring(0, fileName.lastIndexOf('.'));
                directory = new File(directory, fileName);
                FileOutputStream out = new FileOutputStream(directory);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
                out.flush();
                out.close();
            } catch(Exception e){
                Log.v("ActionSync", "Failed to save or load image.");
            }
        }


我不明白,如果我获取URL,为什么它将无法保存图像。如果我不清除缓存,则HTTP状态为304。
在Django测试服务器上,它显示:
/media/instrument_image/1534360416819.jpg HTTP / 1.1“ 200 305999
举个例子。

最佳答案

那许可呢?您尝试保存在externalStorage上,我遇到了同样的问题,这是权限问题。我首先建议:

boolean create = File directory = new File(root + "/instrumentImages");


是真的吗如果没有,您可以通过手机或仿真器设置中的“设置/应用和通知/您的应用/权限”来授予您对应用的存储权限。

08-26 15:58
查看更多