use*_*924 8 django file-upload
我有一些使用FileField的django模型,用户一直在管理界面中上传文件.我们现在有一个问题,有些文件很大(1-3G),这使得http上传很棘手.
有一个"容器"类,然后带有FK的"文件"类到容器.我在admin gui中使用了内联来使用户更容易(容器类窗体,带有文件类内联)
我找到了FilePathField,我想这对于让用户scp/rsync文件到服务器,然后浏览并向他们添加详细信息是有用的,但我怎么能在管理员中得到这个呢?我是否需要构建一个创建对象的新表单/视图?有没有办法以某种方式在自定义管理表单中覆盖模型(从而保持所有免费管理员的优点),用filepathfield替换文件字段?还有其他建议吗?
谢谢你的任何建议!
小智 0
我不确定我是否理解您想要在管理区域中包含的内容。您是否正在寻找一种使用 HTTP 之外的传输协议来自动化文件上传过程的方法?
如果是这样,您可以使用基本 CharField(或者可能是 URLField)创建一个模型,然后在保存对象时执行 rsync 或 scp 复制。例如:
from django.db import models
class File(models.Model):
path = models.CharField()
def save(self):
import os
# WARNING! The path given by the user should be sanitized; this is
# example code only. This is a security vulnerability.
# Attempt to rsync the target file from a remote machine
exit_code = os.system("rsync %s /incoming/files/path/" % self.path)
# Make sure it worked before saving
if exit_code == 0:
super(File, self).save() # Call the "real" save() method
else:
# Raise exception
Run Code Online (Sandbox Code Playgroud)
这是一个非常粗略的示例,但它应该可以帮助您弄清楚一些事情。您需要确保您的例程是安全的(例如,格式错误的路径可能允许用户运行他们想要的任何内容)。另外,这可能会在复制文件时阻止 Django 保存例程,因此您应该考虑在单独的进程中运行您首选的命令。
祝你好运!
| 归档时间: |
|
| 查看次数: |
2003 次 |
| 最近记录: |