写真をアップロードするので、まずはダウンロード可能な画像リソースかどうかを判断する必要があります。正規表現を使用できる場合もありますが、ダウンロード可能かどうかを判断するのは困難です。また、画像リンクの後にサフィックスがあるかどうかを判断することも困難です。サフィックスがない画像もありますが、この制限が解除されると攻撃されやすくなります。そのため、ここでは判定方法として Image を使用します。画像が正常に読み込まれた場合、それは確かに画像であり、ダウンロードできることを意味します。 // リンクが画像を指していてダウンロード可能かどうかを確認します export const checkImgExists = (imgurl: string) => { 新しいPromise(function(resolve,reject))を返す{ var ImgObj = 新しいイメージ(); ::= ::= .src = .imgurl; ImgObj.onload = 関数 (res) { 解決する(res); }; ImgObj.onerror = 関数 (err) { 拒否(エラー); }; }); }; // 使い方 checkImgExists(画像リンク) .then(() => { // imgLink を使って何かする コンソールログ(画像リンク); }) .catch((エラー) => { // ログまたはアラーム コンソールログ(エラー); console.log("申し訳ありませんが、このリンクでは画像を取得できません"); }); 判断が終わったら、画像をダウンロードする必要があります。ここでは XMLHttpRequest を使用してダウンロードを要求し、ダウンロードされた画像は Blob オブジェクトになります。 Blob 自体は FormData オブジェクトまたは File オブジェクトに変換できます。プロジェクトの特定の状況に応じてアップロード戦略を選択できます。OSS にアップロードする場合は、File オブジェクトに変換することを選択できます。独自のサーバーに転送する場合は、Ajax を使用して Blob を FormData に変換してアップロードできます。 // 画像リンク内の画像に対してXMLHttpRequestリクエストを行い、Blobオブジェクトを返します。function getImageBlob(url: string) { 新しいPromise(function(resolve,reject))を返す{ var xhr = 新しい XMLHttpRequest(); xhr.open("get", url, true); xhr.responseType = "blob"; xhr.onload = 関数 () { (このステータス == 200)の場合{ 応答を解決します。 } }; xhr.onerror = 拒否; xhr.send(); }); } // Blob オブジェクトを File オブジェクトに変換します const blobToFile = (blob: Blob, fileName: string) => { 新しい window.File([blob], fileName, { type: blob.type }) を返します。 }; // 使い方 // アップロード操作に使用できる File オブジェクトを返します getImageBlob(src).then(async (res: any) => { const srcSplit = src.split("/"); const ファイル名 = srcSplit[srcSplit.length - 1]; blobToFile(res, ファイル名) を返します。 }); 以下は、OSS をアップロードする簡単なデモンストレーションです。OSS には多くの個人情報が含まれるため、accessKeyId や accessKeySecret などの情報を取得するインターフェースを使用するか、一時キーを使用することをお勧めします。 「ali-oss」からOSSをインポートします。 const ERROR_TIP = "アップロードに失敗しました!"; /** * OSS にファイルをアップロードする例* 関連する accessKeyId、バケット、その他のパラメータは、OSS ライブラリに従って入力する必要があります* 2 つの機密情報 [accessKeyId、accessKeySecret] を取得または暗号化するためのインターフェイスにすることをお勧めします*/ エクスポートconst uploadToOSS = async ( ファイル名: 文字列、 ファイル: ファイル、 アクセスキーID: 文字列、 accessKeySecret: 文字列、 ...小道具 ) => { クライアント = 新しいOSS({ エンドポイント、// 申請した OSS プロジェクト アドレス バケット、// OSS オブジェクト キャリア accessKeyId、// OSS の accessKeyId accessKeySecret、// OSS の accessKeySecret 内部: true、 ...小道具、 }); const putResult = await client.put(fileName, ファイル, { タイムアウト: 60 * 1000 * 2、 }); (putResult.res.status === 200)の場合{ 戻り値: putResult.url, fileName }; } 新しいエラー(ERROR_TIP)をスローします。 }; もちろん、独自のサーバーに写真をアップロードする場合は、Blob 形式のファイルを FormData 形式に変換し、XMLHttpRequest または Ajax を使用して写真をアップロードすることもできます。 // Blob オブジェクトを FormData オブジェクトに変換します。const blobToFormData = (blob: Blob, fileName: string) => { 定数フォームデータ = 新しい FormData(); formdata.append("ファイル", blob, ファイル名); フォームデータを返します。 }; // XMLHttpリクエスト const uploadFile = (formData: FormData) => { const url = "your_interface"; xhr = new XMLHttpRequest(); xhr.onload = 関数 () { console.log("OK"); console.log(JSON.parse(xhr.responseText)); }; xhr.onerror = 関数(){ console.log("失敗"); }; xhr.open("post", url, true); xhr.send(フォームデータ); }; // アヤックス const uploadFile2 = (formData: FormData) => { const url = "your_interface"; $.ajax({ URL、 タイプ: "POST", データ: フォームデータ、 非同期: false、 キャッシュ: false、 コンテンツタイプ: false、 プロセスデータ: false、 成功: 関数 (returndata) { console.log(戻りデータ); }, エラー: 関数 (returndata) { console.log(戻りデータ); }, }); }; 以前のバックエンド プロジェクトでは、Express を静的画像ライブラリとして使用しました。以下は、画像をアップロードするためのノード コードです。注目すべきは、強力な解析を使用した後、jpg ファイルはプリセット写真ディレクトリ内で直接長いランダムな名前を持つということです。実際、ここでも名前変更に短い名前を使用しました。必要に応じて名前変更戦略を選択できます。 定数 express = require("express"); 定数 listenNumber = 5000; express() は、定数です。 bodyParser は、次のコードで定義されます。 const http = require("http"); // サーバーを作成する const formidable = require("formidable"); 定数パス = require("パス"); 定数 fs = require("fs"); app.use(express.static("../../upload")); app.use(bodyParser.urlencoded({extended: false })); app.use(bodyParser.json()); //データ JSON タイプ // 画像のアップロード app.post("/upLoadArticlePicture", (req, res, next) => { defaultPath を "../../upload/" とします。 uploadDir = path.join(__dirname, defaultPath); とします。 フォームを新しい formidable.IncomingForm() にします。 getRandomID = () を実行します => 数値(Math.random().toString().substr(4, 10) + Date.now()).toString(36); form.uploadDir = uploadDir; //アップロードされたファイルのキャッシュディレクトリを設定します form.encoding = "utf-8"; //編集を設定します form.keepExtensions = true; //サフィックスを保持します form.maxFieldsSize = 2 * 1024 * 1024; //ファイルサイズ form.parse(req, function (err, fields, files) { もし(エラー){ res.locals.error = err; res.render("index", { title: TITLE }); 戻る; } filePath = files.file["path"]とします。 backName = filePath.split(".")[1]とします。 oldPath を filePath.split("\\")[filePath.split("\\").length - 1] とします。 newPath = `${getRandomID()}.${backName}` とします。 fs.rename(defaultPath + oldPath, defaultPath + newPath, (err) => { もしエラーが起きたら newPath = `http://localhost:${listenNumber}/${newPath}`; res.json({ フラグ: true、パス: newPath }); } それ以外 { res.json({ フラグ: false、パス: "" }); } }); }); }); これで、JavaScript によるリンク画像のダウンロードとアップロードの実装に関する記事は終了です。JavaScript によるリンク画像のダウンロードとアップロードの関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linux仮想マシンの静的IPアドレスを構成するための手順を完了します
>>: MySQLを使用して列内の異なる値の数をカウントする例
目次1. sysbenchの紹介#プロジェクトダウンロードアドレス: 2. Sysbenchのインス...
Mongodb には db.serverStatus() コマンドがあり、これを使用して Mongo...
1. 一般的な使用法: (1)%で使用する% は 1 つ以上の文字のワイルドカードを表します。たとえ...
Centos7 の yum ソースには、mysql の代わりに mariaDB が使用されているため...
目次序文: 1. 役割の紹介2. 役割に関連する操作要約:序文:前回の記事では、MySQLの権限管理...
概要: MySQL のパフォーマンス最適化について話すとき、誰もがクエリ パフォーマンスを向上させる...
目次序文: 1.DEFINERの簡単な紹介2. いくつかの注意点要約:序文: MySQL データベー...
目次1. グローバルガード1. グローバル前線警備2. グローバル解像度ガード3. グローバルポスト...
CSS3お願いしますこのウェブサイトを自分で見て、パラメータを変更し、CSS3効果をオン/オフにする...
この記事では、jQuery キャンバスを使用して QR コード付きのポスターを生成するための具体的な...
製品デザインのプロセスにおいて、デザイナーは常に写真を非常に美しくすることを好みます。仮想ページのコ...
1. DockerはローカルディレクトリをマウントしますDocker は、ホスト上のディレクトリをイ...
1. 行の形式は何ですか? MySQL の行形式の設定は次のように表示されます。 実際、MySQL ...
フレームセット ページは通常の Web ページとは多少異なります。依然として <HTML>...
目次1. 解体のヒント2. デジタルセパレーター3. try...catch...finally が...