此处将为大家介绍关于DEDEcms出现“Uploadfiletypenotallow”的原因及解决办法的详细内容,并且为您解答有关uploadtempdir的相关问题,此外,我们还将为您介绍关于Acc
此处将为大家介绍关于DEDEcms 出现“Upload filetype not allow”的原因及解决办法的详细内容,并且为您解答有关uploadtempdir的相关问题,此外,我们还将为您介绍关于Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers、Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers、Access-Control-Allow-Origin 标头如何工作? - How does Access-Control-Allow-Origin header work?、AJAX cors 问题:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-credentials的有用信息。
本文目录一览:- DEDEcms 出现“Upload filetype not allow”的原因及解决办法(uploadtempdir)
- Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers
- Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers
- Access-Control-Allow-Origin 标头如何工作? - How does Access-Control-Allow-Origin header work?
- AJAX cors 问题:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-credentials
DEDEcms 出现“Upload filetype not allow”的原因及解决办法(uploadtempdir)
《Dedecms 出现“Upload filetype not allow”的原因及解决办法》要点:
本文介绍了Dedecms 出现“Upload filetype not allow”的原因及解决办法,希望对您有用。如果有疑问,可以联系我们。
[代码]PHP代码:
1 |
$imtypes = array ( "image/pjpeg" , "image/jpeg" "image/gif" "image/png" "image/xpng" "image/wbmp" "image/bmp" );
|
if
(in_array(
strtolower
(trim(${
$_key
.
'_type'
})),
$imtypes
))
{
$image_dd
= @
getimagesize
($
);
(!
is_array
(
$image_dd
))
exit
'Upload filetype not allow !'
8
}
这里的$$_key,指的是上传文件的临时路径,如“d:/PHP/temp/aaa.tmp”.
我们可以看出,这getimagesize($$_key)这个方法,是在哀求PHP临时目录的读取权限,如果d:/PHP/temp没有读取权限就会出现无法读取的错误.
@getimagesize($$_key);返回的值其实是False,而这里DEDE程序员简单的使用了@屏掉错误提示,并没有考虑到权限问题,造成用户无法了解真正错误原因是没有目录权限,而不是文件类型不允许.
一顿茫然.
修改办法如下:
1,在PHP.ini中添加d:/PHP/temp的读写权限,这一步基本上都不用操作.因为这个目录一般都是可读写的,不然任何文件都无法上传;
2,部份虚拟主机用户,可能添加了PHP_admin_value open_basedir 指令,在这里,我们要求添加上临时目录的权限,如:“PHP_admin_value open_basedir "E:/wwwroot/www.a.com;D:/PHP/temp"”
然后重启WebServer,至此,问题解决.
小编培训学院每天发布《Dedecms 出现“Upload filetype not allow”的原因及解决办法》等实战技能,PHP、MysqL、LINUX、APP、JS,CSS全面培养人才。
Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers
我正在尝试使用发布请求将文件发送到我的服务器,但是当它发送时会导致错误:
Access-Control-Allow-Headers 不允许请求标头字段 Content-Type。
所以我用谷歌搜索了错误并添加了标题:
$http.post($rootScope.URL, {params: arguments}, {headers: { "Access-Control-Allow-Origin" : "*", "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS", "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"}
然后我得到错误:
Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Origin
所以我用谷歌搜索,我能找到的唯一类似问题是提供了一个半答案,然后作为离题关闭。我应该添加/删除哪些标题?
答案1
小编典典服务器* (POST 请求被发送到)需要 在其响应Access-Control-Allow-Headers
中包含标头(等)。将它们放入来自客户的请求中没有任何效果。您应该从 POST 请求中删除“Access-Control-
Allow-…”标头。 *
这是因为由服务器指定它接受跨域请求(并且它允许Content-Type
请求标头等)——客户端无法自行决定给定服务器应该允许 CORS。
请求者(网络浏览器)可以通过发送“OPTIONS”请求(即不是您想要的“POST”或“GET”请求)“预检”测试服务器的同源策略是什么。如果对“OPTIONS”请求的响应包含“Access-
Control-Allow-…”标头,允许您的请求使用的标头、来源或方法,则请求者/浏览器将发送您的“POST”或“GET” ‘ 要求。
(晦涩的注释:) Access-Control-Allow-… 具有值“ ”,而不是列出允许的特定来源、标头或方法。 但是,我使用的旧 Android
WebView 客户端不支持 ‘ ‘ 通配符,并且需要在响应 OPTIONS 请求的 Access-Control-Allow-Headers
标头中列出的特定标头。
Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers
我正在尝试使用发布请求将文件发送到服务器,但是在发送请求时会导致错误:
Access-Control-Allow-Headers不允许请求标头字段Content-Type。
所以我搜索了错误并添加了标题:
$http.post($rootScope.URL, {params: arguments}, {headers: { "Access-Control-Allow-Origin" : "*", "Access-Control-Allow-Methods" : "GET,POST,PUT,DELETE,OPTIONS", "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"}
然后我得到错误:
Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Origin
所以我用谷歌搜索,唯一能找到的类似问题是半答案,然后关闭主题。我应该添加/删除哪些标题?
答案1
小编典典服务器 (POST请求发送到的 服务器Access-Control-Allow-Headers
) 的响应中
需要包含标头(等)。将它们放入客户的请求中无效。
这是因为服务器需要指定它接受跨域请求(并允许Content-Type
请求标头,依此类推)–客户端无法自行决定给定服务器应允许CORS。
Access-Control-Allow-Origin 标头如何工作? - How does Access-Control-Allow-Origin header work?
问题:
Apparently, I have completely misunderstood its semantics. 显然,我完全误解了它的语义。 I thought of something like this: 我想到了这样的事情:
- A client downloads javascript code MyCode.js from http://siteA - the origin . 客户端从 http://siteA- origin 下载 javascript 代码 MyCode.js。
- The response header of MyCode.js contains Access-Control-Allow-Origin: http://siteB , which I thought meant that MyCode.js was allowed to make cross-origin references to the site B. MyCode.js 的响应标头包含 Access-Control-Allow-Origin:http:// siteB ,我认为这意味着 MyCode.js 被允许对站点 B 进行跨域引用。
- The client triggers some functionality of MyCode.js, which in turn make requests to http://siteB, which should be fine, despite being cross-origin requests. 客户端触发了 MyCode.js 的某些功能,该功能继而向 http://siteB 发出了请求,尽管这是跨域请求,但仍然可以。
Well, I am wrong. 好吧,我错了。 It does not work like this at all. 它根本不像这样工作。 So, I have read Cross-origin resource sharing and attempted to read Cross-Origin Resource Sharing in w3c recommendation 因此,我阅读了跨域资源共享,并尝试阅读 w3c 建议中的跨域资源共享
One thing is sure - I still do not understand how am I supposed to use this header. 可以确定的一件事 - 我仍然不明白我应该如何使用此标头。
I have full control of both site A and site B. How do I enable the javascript code downloaded from the site A to access resources on the site B using this header? 我对站点 A 和站点 B 都拥有完全控制权。如何使用此标头使从站点 A 下载的 javascript 代码能够访问站点 B 上的资源?
PS 聚苯乙烯
I do not want to utilize JSONP. 我不想利用 JSONP。
解决方案:
参考一: https://stackoom.com/question/id4F/Access-Control-Allow-Origin 标头如何工作参考二: https://oldbug.net/q/id4F/How-does-Access-Control-Allow-Origin-header-work
AJAX cors 问题:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-credentials
如何解决AJAX cors 问题:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-credentials
我正在从主机 (http://abc.com.au) 向在主机 http://localhost:8081 上运行的 Spring Cloud API 网关发送 ajax 请求。
jquery AJAX 请求代码。
SimplifiedAdoptionBulkUpload.jsp
setCookie("username",''abc'',30);
$.ajax({
type: "POST",enctype: ''multipart/form-data'',url: "http://localhost:8081/api/v1/users/bulkUpload",xhrFields: {
withCredentials: true
},data: newData,processData: false,contentType: false,crossDomain: true,cache: false,timeout: 600000,success: function (data) {
.....
},error: function (e) {
$(''#btnSubmit'').prop("disabled",false);
$(''#txtMessage'').text(''Error Occured'');
},beforeSend: function (xhr) {
xhr.setRequestHeader(''Authorization'',''Bearer '' + token);
xhr.setRequestHeader(''Access-Control-Allow-Credentials'',''true'');
xhr.setRequestHeader(''Access-Control-Allow-Headers'',"Origin,Cookie,X-Requested-With,Content-Type,Accept,Authorization");
$(''body'').addClass("loading");
}
});
spring 云网关 cors 配置。
@Configuration
public class PreFlightCorsConfiguration {
private static final String ALLOWED_HEADERS = "Origin,Authorization";
private static final String ALLOWED_METHODS = "*";
private static final String ALLOWED_ORIGIN = "http://abc.com.au";
private static final String ALLOWED_EXPOSE = "*";
private static final String MAX_AGE = "3600";
@Bean
public WebFilter corsFilter() {
return (ServerWebExchange ctx,WebFilterChain chain) -> {
ServerHttpRequest request = ctx.getRequest();
if (CorsUtils.isCorsRequest(request)) {
ServerHttpResponse response = ctx.getResponse();
HttpHeaders headers = response.getHeaders();
headers.set("Access-Control-Allow-Origin",ALLOWED_ORIGIN);
headers.add("Access-Control-Allow-Methods",ALLOWED_METHODS);
headers.add("Access-Control-Max-Age",MAX_AGE);
headers.add("Access-Control-Allow-Headers",ALLOWED_HEADERS);
headers.add("Access-Control-Expose-Headers",ALLOWED_EXPOSE);
headers.add("Access-Control-Allow-Credentials","true");
if (request.getmethod() == HttpMethod.OPTIONS) {
response.setStatusCode(HttpStatus.OK);
return Mono.empty();
}
}
return chain.filter(ctx);
};
}
}
我在 Chrome 控制台中收到以下错误。
SimplifiedAdoptionBulkUpload:1 访问 XMLHttpRequest ''http://localhost:8081/api/v1/users/bulkUpload'' 来自原点 “http://abc.com.au”已被 CORS 政策阻止:请求标头 field access-control-allow-credentials 不允许 预检响应中的 Access-Control-Allow-Headers。
更新:
我从 ajax 请求中删除了这一行。
xhr.setRequestHeader(''Access-Control-Request-Headers'',Authorization");
我正在将两个 cookie(accces_token、refresh_token)设置为 jsp 和 servlet 过滤器中的 cookie。
public class AdminSecurityFilter implements Filter {
public void doFilter(ServletRequest req,ServletResponse res,FilterChain chain) throws IOException,servletexception {
boolean error = false;
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
request.setCharacterEncoding("UTF-8");
if(authenticated) {
String accesstoken = getUserAccesstoken(userStr,passstr);
if(!accesstoken.isEmpty()) {
Cookie cookie = new Cookie("access_token",accesstoken);
cookie.setPath("/");
//cookie.setHttpOnly(true);
//cookie.setDomain("localhost");
//Todo: When in production must do cookie.setSecure(true);
cookie.setMaxAge(3600);
response.setHeader("Access-Control-Allow-Credentials","true");
response.setHeader("Access-Control-Allow-Origin","http://localhost:8081");
response.addCookie(cookie);
}
if(!refreshToken.isEmpty()) {
Cookie cookie = new Cookie("refresh_token",refreshToken);
cookie.setPath("/");
//cookie.setHttpOnly(true);
//cookie.setDomain("localhost");
//Todo: When in production must do cookie.setSecure(true);
cookie.setMaxAge(10000);
response.setHeader("Access-Control-Allow-Credentials","true");
response.setHeader("Access-Control-Allow-Origin","http://localhost:8081");
response.addCookie(cookie);
}
}
}
也在 jsp 文件中我使用 jquery 设置值 cookie。
function setCookie(cname,cvalue,exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
setCookie("username",''Nirangaa'',30);
但是这些 cookie 值(用户名、refresh_token、access_token)在 Spring Cloud Gateway 的标头中缺失。 为什么 AJAX 请求没有将附加在 post 请求中的 cookie 值发送到 apigteway 端。 @T.J.如果你能解释为什么会发生这种情况,克劳德很感激
@Component
public class AccesstokenCheckingGlobalFilterPre extends AbstractGatewayFilterFactory<AccesstokenCheckingGlobalFilterPre.Config> {
public AccesstokenCheckingGlobalFilterPre() {
super(AccesstokenCheckingGlobalFilterPre.Config.class);
}
@Override
public GatewayFilter apply(AccesstokenCheckingGlobalFilterPre.Config config) {
return (exchange,chain) -> {
Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
ServerHttpRequest request = null;
if (route != null) {
request = exchange.getRequest();
**//[Host:"localhost:8081",Connection:"keep-alive",Content-Length:"7391",Accept:"*/*",Access-Control-Allow-Credentials:"true",Authorization:"Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsiamFjcGx1c19yZXNvdXJjZSJdLCJFeHBpcmVzSW4iOjM1OTksInVzZXJfbmFtZSI6Im5zYW5kYXJ1d2FAd2lsZXkuY29tIiwic2NvcGUiOlsiUkVBRCxXUklURSJdLCJleHAiOjE2MTUxOTQwNjIsInVzZXJOYW1lIjoibnNhbmRhcnV3YUB3aWxleS5jb20iLCJhdXRob3JpdGllcyI6WyJST0xFX0FkbWluaXN0cmF0b3IiLCJST0xFX3RlYWNoZXIiLCJST0xFX3NjaGFkbWluIiwiUk9MRV9zdHVkZW50Il0sImp0aSI6IjBkMjQ3ZjJkLTg0NjgtNDUwYS04NjI3LTAzOGI4ZmRlZjQ2MCIsImNsaWVudF9pZCI6ImphY3BsdXMifQ.GT0ayX01TO0fNY834n5_vXsqmt2P3s2C7hfMH-_FLvsNT-p9uIj5i0U66ZdouDUaL9xu1iy4wdfxLexfvilwnO10fTX5I0U7DHqHQetLUwCJOhET0hN-PyFcJRe7k3C3BUe8f7iuDd6Y4VbLCYTTpp4KSjWcS5fv-BTrvTvktwtkq5oFK2iCtPS6JwqPcFsvt2MYNi9UlGFeik_a-iyuTTa7xf7VgL2XFnGqcu3bOTUNxj4AhG91YL5har3OnFTbZnKFxVWykEz7MJFSXzmhmSS5rNYAbC5FBg65VFmzD0j9G4j1xPODxmLEEeE2Qj5FSe6VTnEZIiFHTLd27IuYyA",User-Agent:"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/75.0.3770.142 Safari/537.36",Origin:"http://abc.com.au",Content-Type:"multipart/form-data; boundary=----WebKitFormBoundaryV5bORQSNHAa3kxFR",Referer:"http://admin.jacplus.com.au/admin/SimplifiedAdoptionBulkUpload",Accept-Encoding:"gzip,deflate,br",Accept-Language:"en-US,en;q=0.9"]**
HttpHeaders headers = request.getHeaders();
List<String> authorizationHeader = headers.get(HttpHeaders.AUTHORIZATION);
String value = authorizationHeader.get(0);
MultiValueMap<String,HttpCookie> cookies = request.getCookies(); /// nulll
}
return chain.filter(exchange.mutate().request(request).build());
};
}
解决方法
Access-Control-Allow-XYZ
标头是 响应 标头,而不是请求标头。从您的 $.ajax
调用中删除它们。您可能需要 Access-Control-Request-XYZ
标头,例如:
xhr.setRequestHeader(''Access-Control-Request-Headers'',"Origin,Cookie,X-Requested-With,Content-Type,Accept,Authorization");
// −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−^^^^^^^
这是一个有效的请求标头。 (不过,CORS spec 中没有列出 Access-Control-Request-Credentials
标头,因此应删除添加 Access-Control-Allow-Credentials
标头的另一行。)
更一般地说,您的响应的 Access-Control-Allow-Headers
值必须允许请求中的任何标头,而您的响应中没有该值。但解决方法是将其从请求中移除,而不是将其添加到 Access-Control-Allow-Headers
值中。
另见:CORS specification
今天关于DEDEcms 出现“Upload filetype not allow”的原因及解决办法和uploadtempdir的讲解已经结束,谢谢您的阅读,如果想了解更多关于Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Headers、Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Headers、Access-Control-Allow-Origin 标头如何工作? - How does Access-Control-Allow-Origin header work?、AJAX cors 问题:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 access-control-allow-credentials的相关知识,请在本站搜索。
本文标签: