【发布时间】:2017-07-07 17:25:45
【问题描述】:
我正在构建一个解决方案,该解决方案从 Web 浏览器截取屏幕截图并将其发送到 django 端点。当我使用邮递员发送信息时,该解决方案有效。但是,当我使用我的 javascript google chrome 扩展程序时,它会失败。我发送的信息由image(text)和dashboard_type(text)两个字段组成,
views.py
class ScreenShotUpload(APIView):
def post(self, request, format=None):
dashboard_type = request.data.get("dashboard_type", None)
image_str = request.data.get("image", None)
if dashboard_type is None or image_str is None:
return Response({"Error": "invalid entry"}, status.HTTP_400_BAD_REQUEST)
if dashboard_type not in [ScreenShot.SH, ScreenShot.WE, ScreenShot.PA, ScreenShot.PR]:
return Response(
{"Error": "invalid dashboard_type, must be either PA, PR, SH or WE"}, status.HTTP_400_BAD_REQUEST)
ScreenShot.objects.filter(is_latest=True).update(is_latest=False)
new_screenshot = ScreenShot(dashboard_type=dashboard_type, is_latest=True)
new_screenshot.set_image_path()
new_screenshot.save_image_str(image_str)
new_screenshot.save()
return Response({"status": "200"}, status.HTTP_200_OK)
chrome-extension.js
var id = 100;
chrome.browserAction.onClicked.addListener(function() {
chrome.tabs.captureVisibleTab(null, {format: "jpeg", quality: 100}, function(screenshotUrl) {
var xhr = new XMLHttpRequest() , formData = new FormData();
formData.append("image", screenshotUrl);
formData.append("dashboard_type", "SH");
xhr.open("POST", "http://intranet/api/powerbi/screenshots_upload/");
xhr.send(formData);
var viewTabUrl = chrome.extension.getURL('screenshot.html?id=' + id++)
var targetId = null;
});
});
正如我上面写的,当我使用邮递员将图像作为代表图像的 base64 字符串发送时,它可以工作,但是当我使用此脚本时,它失败(图像损坏),当我发送它时,图像的大小更小脚本比邮递员。我缩小到两种可能性,要么 xhr 请求不发送完整图像,要么我需要以不同的方式解析 request.data。有人可以解释发生了什么吗?谢谢。
【问题讨论】:
标签: javascript django python-3.x google-chrome-extension