如何检查文件是否存在于jQuery或纯JavaScript中?
如何检查我的服务器上的文件是否存在于jQuery或纯JavaScript中?
使用jQuery:
$.ajax({ url:'http://www.example.com/somefile.ext', type:'HEAD', error: function() { //file not exists }, success: function() { //file exists } });
编辑:
这里是检查404状态的代码,不使用jQuery
function UrlExists(url) { var http = new XMLHttpRequest(); http.open('HEAD', url, false); http.send(); return http.status!=404; }
小的变化,它可以检查状态HTTP状态代码200(成功),而是。
一个类似的和更新的方法。
$.get(url) .done(function() { // exists code }).fail(function() { // not exists code })
这适用于我:
function ImageExist(url) { var img = new Image(); img.src = url; return img.height != 0; }
我用这个脚本添加替代图像
function imgError() { alert('The image could not be loaded.'); }
HTML:
<img src="image.gif" onerror="imgError()" />
只要你在相同的域上testing文件,这应该工作:
function fileExists(url) { if(url){ var req = new XMLHttpRequest(); req.open('GET', url, false); req.send(); return req.status==200; } else { return false; } }
请注意,这个例子是使用GET请求,除了获取标题(你需要检查天气文件是否存在),获取整个文件。 如果文件足够大,则此方法可能需要一段时间才能完成。
更好的方法是改变这一行: req.open('GET', url, false);
req.open('HEAD', url, false);
当试图运行这个问题的答案时,我得到了跨域权限问题,所以我去了:
function UrlExists(url) { $('<img src="'+ url +'">').load(function() { return true; }).bind('error', function() { return false; }); }
这似乎很好,希望这可以帮助别人!
下面是如何做ES7的方法,如果你使用的是Babel transpiler或者Typescript 2:
async function isUrlFound(url) { try { const response = await fetch(url, { method: 'HEAD', cache: 'no-cache' }); return response.status === 200; } catch(error) { // console.log(error); return false; } }
然后在你的其他async
范围内,你可以很容易地检查url是否存在:
const isValidUrl = await isUrlFound('http://www.example.com/somefile.ext'); console.log(isValidUrl); // true || false
你需要做的是发送一个请求到服务器进行检查,然后把结果发回给你。
你想与哪种types的服务器通信? 您可能需要编写一个servlets来响应请求。
对于客户端计算机来说,这可以通过
try { var myObject, f; myObject = new ActiveXObject("Scripting.FileSystemObject"); f = myObject.GetFile("C:\\img.txt"); f.Move("E:\\jarvis\\Images\\"); } catch(err) { alert("file does not exist") }
这是我的程序将文件传输到特定的位置,并显示警报,如果它不存在
首先创build该function
$.UrlExists = function(url) { var http = new XMLHttpRequest(); http.open('HEAD', url, false); http.send(); return http.status!=404; }
这并没有解决OP的问题,但是对于任何从数据库返回结果的人来说:这是我用过的一个简单的方法。
如果用户没有上传头像, avatar
字段将是NULL
,所以我会从img
目录中插入一个默认的头像图片。
function getAvatar(avatar) { if(avatar == null) { return '/img/avatar.jpg'; } else { return '/avi/' + avatar; } }
然后
<img src="' + getAvatar(data.user.avatar) + '" alt="">
JavaScript函数检查文件是否存在:
function doesFileExist(urlToFile) { var xhr = new XMLHttpRequest(); xhr.open('HEAD', urlToFile, false); xhr.send(); if (xhr.status == "404") { console.log("File doesn't exist"); return false; } else { console.log("File exists"); return true; } }
我使用这个脚本来检查一个文件是否存在(也可以处理跨源问题):
$.ajax(url, { method: 'GET', dataType: 'jsonp' }) .done(function(response) { // exists code }).fail(function(response) { // doesnt exist })
请注意,当被检查的文件不包含JSON时,会引发以下语法错误。
未捕获的SyntaxError:意外的标记<
它适用于我,使用iframe忽略浏览器显示GET错误消息
var imgFrame = $('<iframe><img src="' + path + '" /></iframe>'); if ($(imgFrame).find('img').attr('width') > 0) { // do something } else { // do something }
asynchronous调用来查看文件是否存在是更好的方法,因为它不会通过等待来自服务器的响应来降低用户体验。 如果你.open
的第三个参数设置为false(就像在上面的很多例子中,例如http.open('HEAD', url, false);
),这是一个同步调用,你会得到一个警告在浏览器控制台中。
更好的方法是:
function fetchStatus( address ) { var client = new XMLHttpRequest(); client.onload = function() { // in case of network errors this might not give reliable results returnStatus( this.status ); } client.open( "HEAD", address, true ); client.send(); } function returnStatus( status ) { if ( status === 200 ) { console.log( 'file exists!' ); } else { console.log( 'file does not exist! status: ' + status ); } }
来源: https : //xhr.spec.whatwg.org/
这是对已被接受的答案的修改,但是我不能从答案中得到我所需的东西,而且必须testing这个工作,因为这是一个预感,所以我把我的解决scheme放在这里。
我们需要validation本地文件是否存在,并且只允许打开文件(PDF)。 如果您省略网站的URL,浏览器将自动确定主机名 – 使其在本地主机和服务器上工作:
$.ajax({ url: 'YourFolderOnWebsite/' + SomeDynamicVariable + '.pdf', type: 'HEAD', error: function () { //file not exists alert('PDF does not exist'); }, success: function () { //file exists window.open('YourFolderOnWebsite/' + SomeDynamicVariable + '.pdf', "_blank", "fullscreen=yes"); } });