Tìm thấy một câu trả lời bản thân mình, đây là giải pháp trong trường hợp ai đó cần nó:
Ở phía khách hàng, đây là cách bạn có được hình ảnh từ vải và đặt nó vào một trường mẫu (một lĩnh vực char ẩn):
var dataURL = document.getElementById('canvas_id').toDataURL("image/png");
document.getElementById('id_hidden_image_field').value = dataURL;
Và ở bên django:
thêm vào dưới dạng một lĩnh vực ẩn có tên 'hidden_image_field', mà sẽ được sử dụng để truyền dữ liệu. lĩnh vực này là một CharField đơn giản. bạn có thể thêm giới hạn max_length để đảm bảo hình ảnh ở kích thước hợp lý (lưu ý: không phải kích thước nhưng kích thước thực).
để phân tích dữ liệu hình ảnh:
import re
import base64
dataUrlPattern = re.compile('data:image/(png|jpeg);base64,(.*)$')
ImageData = request.POST.get('hidden_image_field')
ImageData = dataUrlPattern.match(ImageData).group(2)
# If none or len 0, means illegal image data
if (ImageData == None or len(ImageData) == 0:
# PRINT ERROR MESSAGE HERE
pass
# Decode the 64 bit string into 32 bit
ImageData = base64.b64decode(ImageData)
và bây giờ imageData chứa dữ liệu nhị phân, bạn chỉ có thể lưu vào một tập tin và nó sẽ làm việc.
hy vọng điều này sẽ hữu ích.
Nguồn
2013-06-27 12:29:49
bạn đã thử những gì? ý bạn là gì "được tạo tự động"? bạn lấy từ danh sách hình ảnh hoặc thực sự vẽ một hình ảnh mới? bạn đã kiểm tra https://docs.djangoproject.com/en/dev/topics/http/file-uploads/ này chưa? –
Tôi thực sự vẽ một cái gì đó mới, vì vậy việc gửi một chỉ mục hình ảnh sẽ không hoạt động. Tôi đã thử bằng cách sử dụng một CharField để chuyển dữ liệu nhị phân nhưng tôi đang mất một số dữ liệu (có thể có một workaround mà?). đối tượng tệp có thể là một ý tưởng hay. là nó có thể giả mạo một tập tin tải lên từ javascript mà không cần tải lên bất kỳ tập tin thực tế? - cảm ơn –