ajax获取http访问状态--判断图片路径是否有效

本文介绍了如何通过Ajax获取HTTP访问状态来判断图片路径是否有效。首先,通过获取项目名来拼接图片的完整URL,然后调用isHavePic方法进行路径检查。在isHavePic函数中,使用Ajax发送请求,但需要注意Firefox浏览器会错误地报告404状态,对于存在资源的情况,可以考虑使用ExtJS的Ext.get方法替代。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1.获取                   var urlhead = location.protocol + "//" + location.host + "/项目名/";                    
  2.拼接图片全路径                  var zp1 = ds_beforeloan_privateone.getAt(0).get('zp1')==''?urlhead + 'upload/avtar.jpg':urlhead + ds_beforeloan_privateone.getAt(0).get('zp1');



3.判断路径是否存在               isHavePic(zp1)//方法调用

4.ajax函数

                     //当有图片路径是否丢失

                        function isHavePic(url){          //url为     图片路径          

                        var avtarjpg=urlhead + 'upload/avtar.jpg'; //默认图片,用于找不到资源时显示

                        jQuery.ajax({
                            url: url,
                            type: "post",
//                            async : false,
//                            success: function(msg) {                            
//                            },
                            error: function(XMLHttpRequest, textStatus, errorThrown) {
                                                            
                            if(XMLHttpRequest.status==404){//资源不存在
//                                    alert(XMLHttpRequest.status);
//                                    alert(XMLHttpRequest.readyState);
                                    if (Ext.isIE) {                                          //ie浏览器载入默认图片 
                                    if(url==zp1){image1.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = avtarjpg;}
                                    if(url==zp2){image2.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = avtarjpg;}
                                    if(url==zp3){image3.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = avtarjpg;}
                                    }else{                                               //其他浏览器载入默认图片 
                                    if(url==zp1){Ext.get('image1').dom.src = avtarjpg;}
                                    if(url==zp2){Ext.get('image2').dom.src = avtarjpg;}
                                     if(url==zp3){Ext.get('image3').dom.src = avtarjpg;}
                                    }
                            }else{
                                if (Ext.isIE) {               //ie浏览器载入找到的资源图片 
                                    if(url==zp1){image1.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = url;}
                                    if(url==zp2){image2.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = url;}
                                    if(url==zp3){image3.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = url;}
                                }
                                }
                            
                            //alert(XMLHttpRequest.readyState);
                            //alert(textStatus);
                            
                        }
    //                        ,
//                            complete: function(XMLHttpRequest, textStatus) {
//                            this; // 调用本次AJAX请求时传递的options参数
//                            }
                            });

                    }

//注意:firebox浏览器无论资源图片是否存在 ,都判断为资源丢失 404状态,所以当资源存在时不能用此ajax方法,可以使用其他方法,

我用的是extjs方法:Ext.get('image3').dom.src = zp3;

### Vue 中实现通过粘贴图片 URL 来上传图片的功能 要在 Vue 中实现通过粘贴图片 URL 的方式来上传图片,可以按照以下思路设计解决方案: #### 功能概述 当用户在输入框中粘贴一张图片的 URL 时,前端会自动抓取该图片并将其转换为文件对象。随后,可以通过 `FormData` 将其发送到后端接口完成上传操作。 --- #### 技术细节与实现步骤 1. **监听粘贴事件** 使用 Vue 和 Element UI 提供的组件属性绑定机制,在 `<el-input>` 上绑定 `@paste.native` 方法捕获用户的粘贴行为[^2]。 2. **解析粘贴内容中的图片链接** 当检测到粘贴的内容是一个有效图片 URL 时,提取该 URL 并验证其合法性。 3. **下载远程图片资源** 利用 JavaScript 的 `fetch` 或者 `axios` 请求库从服务器获取图片数据流,并将其转化为 Blob 对象。 4. **创建 File 对象** 将 Blob 数据封装成标准的 File 对象以便后续处理。 5. **构建 FormData 并提交至后端** 创建一个 `FormData` 实例并将 File 添加进去,最后通过 AJAX 调用 `/multipartUpload` 接口完成上传过程[^1]。 以下是完整的代码示例: ```javascript <template> <div> <!-- 输入区域 --> <el-input type="textarea" @paste.native="handlePaste" v-model="inputText" placeholder="请输入..."></el-input> <!-- 已上传图片展示区 --> <span v-for="(file, index) in uploadedFiles" :key="index" style="margin-left: 10px;"> <img :src="file.previewUrl" alt="Uploaded Image" style="width: 100px;" /> <i class="el-icon-close" @click="removeFile(index)"></i> </span> </div> </template> <script> export default { data() { return { inputText: "", // 用户输入的文字内容 uploadedFiles: [] // 存储已上传的文件信息 }; }, methods: { async handlePaste(event) { const clipboardData = event.clipboardData || window.clipboardData; let pastedContent = clipboardData.getData("text/plain"); try { if (this.isImageUrl(pastedContent)) { // 验证是否为合法图片URL const blob = await this.fetchImageAsBlob(pastedContent); // 下载图片作为Blob const file = new File([blob], "pasted-image.png", { type: "image/png" }); // 构建File对象 const formData = new FormData(); formData.append("file", file); // 发送请求给后端 const response = await fetch("/api/multipartUpload", { method: "POST", body: formData, }); if (!response.ok) throw new Error("Failed to upload image."); const result = await response.json(); // 更新状态显示成功上传的结果 this.uploadedFiles.push({ previewUrl: `${result.baseUrl}${result.fileName}`, fileName: result.fileName, }); } } catch (error) { console.error(error); } }, isImageUrl(urlString) { const imgPattern = /\.(jpeg|jpg|gif|png)$/i; // 正则匹配常见图片扩展名 return urlString && urlString.match(imgPattern); }, async fetchImageAsBlob(imageUrl) { const response = await fetch(imageUrl); if (!response.ok) throw new Error(`Could not load image at ${imageUrl}`); return await response.blob(); // 返回Blob形式的数据 }, removeFile(index) { this.uploadedFiles.splice(index, 1); // 移除指定索引处的文件记录 } } }; </script> ``` --- #### 关键点说明 - **判断粘贴内容是否有效图片 URL** 可以利用正则表达式校验字符串是否符合常见的图片格式规则。 - **跨域问题** 如果目标图片托管于其他域名下,则需要注意浏览器的安全策略可能阻止直接访问这些外部资源。此时需联系对方服务提供 CORS 支持或者借助代理解决此限制。 - **错误处理** 整个流程涉及多个异步环节(比如网络请求),因此建议加入全面的异常捕捉逻辑以免程序崩溃影响用户体验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值