我有一个使用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");
是真的吗如果没有,您可以通过手机或仿真器设置中的“设置/应用和通知/您的应用/权限”来授予您对应用的存储权限。