Webブラウザからスクリーンショットを取得してdjangoエンドポイントに送信するソリューションを構築しています。このソリューションは、郵便配達員が情報を送信するときに機能します。しかし、私は私のjavascriptのGoogle Chromeの拡張機能を使用すると失敗します。私は送信情報は、画像(テキスト)とdashboard_type(テキスト)、画像をアップロードするDjangoエンドポイントがブラウザから送信されたときに失敗しますが、投稿者ではありません
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)
クロム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;
});
});
ように、2つのフィールドから構成されています上記のように、画像を表すbase64文字列として画像を送信するときは郵便番号を使用しますが、このスクリプトを使用すると失敗します(画像が壊れます)。画像のサイズは送信時に小さくなります郵便配達員よりもスクリプトの方がいいです。私は2つの可能性に絞って、xhrリクエストが完全なイメージを送信しないか、request.dataを別の方法で解析する必要があります。誰かが何が起こっているか説明できますか?ありがとうございました。