Android-使用Glide访问Django服务器上的静态文件失败



我有以下Django型号:

class MyAccount(AbstractBaseUser):
...
profile_picture = models.FileField(upload_to='Images/',default='Images/placeholder.jpg')
... 

当用户创建此帐户时,他将获得一个默认的占位符图像。用户的注册(为特定用户创建MyAccount实例(按预期工作。

但我的安卓应用程序在请求时无法获取占位符图像。在我的本地Django开发服务器上,我得到以下错误:

[17/Nov/2020 12:54:34] "GET /media/Images/placeholder.jpg HTTP/1.1" 404 2569
Not Found: /media/Images/placeholder.jpg

为什么会发生这种情况?图像placeholder.jpg存在,那么怎么可能找不到该文件呢?

在AndroidStudio的LogCat输出中,我在筛选okhttp时遇到了类似的错误。您还可以看到注册已正确完成,但找不到文件:

2020-11-17 13:54:32.852 5825-5924/com.example.project D/OkHttp: {"response":"successfully authenticated.","id":1,"email":"abdullah@gmail.com","username":"abdullahc","profile_picture":"http://192.***.*.***:8000/media/Images/placeholder.jpg","date_joined":"2020-11-17T12:54:30.702559Z","token":"88b8ea2cf59ba851f7bac1751946213f5ee5afe9"}
2020-11-17 13:54:32.852 5825-5924/com.example.project D/OkHttp: <-- END HTTP (287-byte body)
2020-11-17 13:54:33.854 5825-5825/com.example.project I/Glide: Root cause (1 of 1)
java.io.FileNotFoundException: http://192.168.2.104:8000/media/Images/placeholder.jpg
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:251)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:102)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:56)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.startNextOrFail(MultiModelLoader.java:164)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.onLoadFailed(MultiModelLoader.java:154)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:62)
at com.bumptech.glide.load.model.MultiModelLoader$MultiFetcher.loadData(MultiModelLoader.java:100)
at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)
at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)
at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)
at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:279)
at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory$1.run(GlideExecutor.java:393)

您是否将以下命令保存在settings.py中?

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

最新更新