我有一个应用程序,当前允许用户上传文件并将其保存在Web服务器上。我的客户现在决定使用第三方云托管服务来满足他们的文件存储需求。该公司有自己的API用于在其服务器上执行CRUD操作,因此我编写了一个脚本来测试其API,并将该文件作为base64编码的JSON有效内容发送到API。该脚本工作正常,但现在我坚持如何实现这个功能到Django。通过JSON发送文件,而不是上传到服务器,Django
json_testing.py
import base64
import json
import requests
import magic
filename = 'test.txt'
# Open file and read file and encode it as a base64 string
with open(filename, "rb") as test_file:
encoded_string = base64.b64encode(test_file.read())
# Get MIME type using magic module
mime = magic.Magic(mime=True)
mime_type = mime.from_file(filename)
# Concatenate MIME type and encoded string with string data
# Use .decode() on byte data for mime_type and encoded string
file_string = 'data:%s;base64,%s' % (mime_type.decode(), encoded_string.decode())
payload = {
"client_id": 1,
"file": file_string
}
headers = {
"token": "AuthTokenGoesHere",
"content-type": "application/json",
}
request = requests.post('https://api.website.com/api/files/', json=payload, headers=headers)
print(request.json())
models.py
def upload_location(instance, filename):
return '%s/documents/%s' % (instance.user.username, filename)
class Document(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
file = models.FileField(upload_to=upload_location)
def __str__(self):
return self.filename()
def filename(self):
return os.path.basename(self.file.name)
所以要重申的是,当用户上传的某个地方,而不是存储在Web服务器上的文件的文件,我想为base64对文件进行编码,以便我可以将文件作为JSON有效内容发送。任何想法是什么将是最好的方法来解决这个问题?
我不确定我是否理解。您已经知道如何进行适当的请求,问题在哪里? – freakish
@freakish。我只想对文件进行编码,将其作为有效负载发送,然后丢弃文件,而不是将文件保存在Web服务器上。我是否必须上传文件,然后进行编码,然后将其作为JSON有效内容发送,然后删除文件?我想知道是否有某种方式我可以在内存中编码文件,而无需将其保存到Web服务器 – nastyn8
只需从django应用调用u're脚本,而不是用来做什么,我不明白它。 .. –