精华内容
下载资源
问答
  • URIpath部分存在方括号符号:[和]。这两个符号在Nginx URI编码过程中,没有进行百分号编码。 解决 在Spring中指定忽略Path中的方括号字符。 @Bean public ConfigurableServletWebServerFactory webServerFactory...

    问题

    在使用Get请求,存在方括号[]符号时,Spring中的Tomcat报400错误。

    原因

    URI中path部分存在方括号符号:[]。这两个符号在Nginx URI编码过程中,没有进行百分号编码。

    解决

    在Spring中指定忽略Path中的方括号字符。

      @Bean
      public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers(connector -> connector.setProperty("relaxedPathChars", "[]"));
        return factory;
      }
    

    排查过程

    启用Nginx调试模式

    源码编译nginx时,使用下面配置:

    /configure --with-debug ...
    

    然后,在配置文件中配置debug日志:

    http {
        server {
            error_log  logs/api_error.log  debug;
            ...
    

    通过api_error.log日志文件,可以知道Nginx会自动编码一边url,再转发给spring。这里Nginx使用upstream方式进行代理的,这里方括号符号,被Nginx从百分号编码还原成了原始方括号符合,造成Spring Tomcat 400了。

    总结

    需要前端排除的符号:
    %#:;/\?
    需要Spring兼容Nginx的uri的path特殊符号:
    []{}^
    即Spring中配置:

      @Bean
      public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers(connector -> connector.setProperty("relaxedPathChars", "[]{}^`"));
        return factory;
      }
    

    这个问题,不要使用PostMan(Version 9.1.1 (9.1.1))进行接口调试,PostMan调试不出来这个问题,要用curl命令行进行接口调试。

    参考:

    展开全文
  • 1、uri转file:file = new File(new URI(uri.toString()));file转uri:URI uri = file....2、uripath:private String getPath(Context context, Uri uri) {String path = null;Cursor cursor = context.getContentRe...

    1、uri转file:

    file = new File(new URI(uri.toString()));

    file转uri:

    URI uri = file.toURI();

    2、uri转path:

    private String getPath(Context context, Uri uri) {

    String path = null;

    Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);

    if (cursor == null) {

    return null;

    }

    if (cursor.moveToFirst()) {

    try {

    path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    cursor.close();

    return path;

    }

    path转uri:

    Uri uri = Uri.parse(path);

    3、file转path:

    String path = file.getPath()

    path转file:

    File file = new File(path)

    展开全文
  • URI与URL详解

    2021-06-05 01:39:09
    https://blog.csdn.net/readiay/article/details/52862379看开源框架经常看到会用到URL或者URI之类的,为什么要熟悉这个...你用了URI或者URL,当你想获取这个资源位置信息的某个属性时怎么着也比String方便吧。[TOC...

    https://blog.csdn.net/readiay/article/details/52862379

    看开源框架经常看到会用到URL或者URI之类的,为什么要熟悉这个呢?

    比如说你写一个网络程序,需要访问资源,资源位置信息最好封装起来,如果使用String表示,虽然可以使用,但是感觉挺low的。你用了URI或者URL,当你想获取这个资源位置信息的某个属性时怎么着也比String方便吧。

    [TOC]

    ## 1、URI与URL的定义

    URI:统一资源标志符(Uniform Resource Identifier)

    URL:统一资源定位符(uniform resource location)

    说白了,URI与URL都是定位资源位置的,就是表示这个资源的位置信息,就像经纬度一样可以表示你在世界的哪个角落。URI是一种宽泛的含义更广的定义,而URL则是URI的一个子集,就是说URL是URI的一部分。

    换句话说,每个URL都是URI,但是不是每个URI都是URL的。他们之间最明显的不同就是在java.net.URI你只能看到他的一些属性,他只是表示一个位置,但是你没有办法通过URI获取到这个对象的流,但是URL就不同了。java.net.URL该类提供方法(openConnection()),通过该方法我们可以通过IO流操作他。但是URI中我貌似没看到相关的方法。

    也就是说:URL是可以直接操作的,但是URI并不行。(如果你发现这句话不对,麻烦告诉我下)

    ## 2、URL的语法

    URL与URI很像,两者的格式几乎差不多,但是我们接触的还是URL比较多,就以URL为例说明

    URL提供了一种访问定位因特网上任意资源的手段,但是这些资源可以通过不同的方法(例如HTTP、FTP、SMTP)来访问,不管怎样,他都基本上由9个部分构成:

    ://:@:/;?#

    scheme:获取资源使用的协议,例如http、ftp等,没有默认值

    user:password:用户名与密码,这个是一个特殊的存在,一般访问ftp时会用到,他显示的表明了访问资源的用户名与密码。但是这个可以不写,不写的话可能会让你输入用户名密码

    host:主机,访问那台主机,有时候可以是IP,有时候是主机名,例如www.baidu.com

    port:端口,访问主机时的端口,如果http访问默认80,可以省略。

    path:通过host:port我们能找到主机,但是主机上文件很多,通过path则可以定位具体文件。例如www.baidu.com/file/index.html。则path是/file/index.html,表示我们访问/file/index.html这个文件,他很像linux上的路径。

    params:这个很少见,主要作用就是像服务器提供额外的参数,用来表示本次请求的一些特性。例如ftp传输模式有两种,二进制和文本,你肯定不希望使用文本形式传输二进制图片,这样你的图片下载下来后可能没法看了。为了向应用程序提供更丰富的信息,URL中有个专门的部分来表示这种参数。例如ftp://file.qiandu.com/pub/guid.pdf;type=d其中的type=d就是params

    query:通过get方式请求的参数,例如:www.qiandu.com/index.html?username=dgh&passwd=123

    fragment:例如www.qiandu.com/index.html#1。当html页面比较长时,我们通常会将其分为好几段,#1就可以 快速定位到某一段。

    ## 3、Java中对URI的操作类

    ```

    @Test

    public void uriTest() throws Exception{

    URI uri = new URI("https://www.qiandu.com:8080/goods/index.html?username=dgh&passwd=123#j2se");

    System.out.println("scheme : " + uri.getScheme());

    System.out.println("SchemeSpecificPart : " + uri.getSchemeSpecificPart());

    System.out.println("Authority : " + uri.getAuthority());

    System.out.println("host : " + uri.getHost());

    System.out.println("port : " + uri.getPort());

    System.out.println("path : " + uri.getPath());

    System.out.println("query : " + uri.getQuery());

    System.out.println("fragment : " + uri.getFragment());

    }

    ```

    运行上面的代码,然后得到如下的结果:

    ## 4、Java中对URL的操作

    ```

    @Test

    public void urlTest() throws Exception{

    URL url = new URL("https://www.qiandu.com:8080/goods/index.html?username=dgh&passwd=123#j2se");

    System.out.println("URL: " + url.toString());

    System.out.println("protocol: " + url.getProtocol());

    System.out.println("authority: " + url.getAuthority());

    System.out.println("file name: " + url.getFile());

    System.out.println("host: " + url.getHost());

    System.out.println("path: " + url.getPath());

    System.out.println("port: " + url.getPort());

    System.out.println("default port:" + url.getDefaultPort());

    System.out.println("query: " + url.getQuery());

    System.out.println("ref: " + url.getRef());

    }

    运行上面的代码,得到以下结果:

    ```

    ![](https://box.kancloud.cn/b979ae6159978ed2d2b716a51eaa98da_469x213.png)

    ## 5、UserInfo属性

    其实关于资源定位的时候还有一种写法,就是类似于

    `sftp://tomcat@www.qiandu.com///app/index.pdf`

    就是在主机名前面有类似于xxx@的东西,其实这种表示就:用户@主机名或者用户@IP。@前面表示登录主机的用户,也就是UserInfo了。

    ![](https://box.kancloud.cn/c95721dae2c2216ecdf9ff1f5a83460f_563x183.png)

    展开全文
  • 代码提取上面我们通过实例讲解了肉眼识别Uri更部分的方式,但在代码中又要怎样提取呢。下面就看看Uri中提取各部分的接口,依然...path=32&id=4#harvicgetScheme() :获取Uri中的scheme字符串部分,在这里即,htt...

    代码提取

    上面我们通过实例讲解了肉眼识别Uri更部分的方式,但在代码中又要怎样提取呢。下面就看看Uri中提取各部分的接口,依然以上面的Uri字符串为例:

    http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic

    getScheme() :获取Uri中的scheme字符串部分,在这里即,http

    getSchemeSpecificPart():获取Uri中的scheme-specific-part:部分,这里是://www.java2s.com:8080/yourpath/fileName.htm?

    getFragment():获取Uri中的Fragment部分,即harvic

    getAuthority():获取Uri中Authority部分,即www.java2s.com:8080

    getPath():获取Uri中path部分,即/yourpath/fileName.htm

    getQuery():获取Uri中的query部分,即stove=10&path=32&id=4

    getHost():获取Authority中的Host字符串,即www.java2s.com

    getPost():获取Authority中的Port字符串,即8080

    另外还有两个常用的:getPathSegments()、getQueryParameter(String key)

    List< String> getPathSegments():上面我们的getPath()是把path部分整个获取下来:/yourpath/fileName.htm,getPathSegments()的作用就是依次提取出Path的各个部分的字符串,以字符串数组的形式输出。以上面的Uri为例:

    String mUriStr ="http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic";

    Uri mUri = Uri.parse(mUriStr);

    List pathSegList = mUri.getPathSegments();

    for(String pathItem:pathSegList){

    Log.d("qijian","pathSegItem:"+pathItem);

    }

    打出来的列表为:

    1c9d893d665c

    getQueryParameter(String key):在上面我们通过getQuery()获取整个query字段:stove=10&path=32&id=4,getQueryParameter(String key)作用就是通过传进去path中某个Key的字符串,返回他对应的值。

    String mUriStr ="http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id#harvic";

    mUri = Uri.parse(mUriStr);

    Log.d(tag,"getQueryParameter(\"stove\"):"+mUri.getQueryParameter("stove"));

    Log.d(tag,"getQueryParameter(\"id\"):"+mUri.getQueryParameter("id"));

    网址:http://blog.csdn.net/harvic880925/article/details/44679239

    展开全文
  • Android UriPath

    2020-12-30 17:00:35
    在Android UriPath的过程中,发现在查询文件管理中的视频时,通过Uri查询系统媒体库得到的存储路径为null,但是可以通过拼接的方式来得到存储路径。 private static String getMediaPathFromUri(Context context...
  • uri转真实path

    2021-05-08 16:10:51
    public class UriToPathUtils { /** * 根据Uri获取图片的绝对路径 * * @param context 上下文对象 * @param uri 图片的Uri ... public static String getRealPathFromUri(Context context, Uri uri) {
  • 从真正的路径获取Uri

    2021-03-11 12:13:28
    在文件路径中转换“file:// ...”,使用以下代码查找项目的ID,然后将其附加到提供者URI . 此外,基于文件扩展名,使用正确的提供程序(例如MediaStore.Video.Media.EXTERNAL_CONTENT_URI或MediaStore.Image.Media....
  • Android中UriPath之间的转换原因调用系统拍照应用,拍照后要保存图片,那么我们需要指定一个存储图片路径的Uri。这就涉及到如何将file path转换为Uri。有时候我们还需要根据照片的路径得到照片的media Uri,那么又...
  • Android 图片UriPath

    2021-06-05 16:26:47
    public static String getPath(Context context, Uri uri) {final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;// DocumentProviderif (isKitKat && DocumentsContract.isD...
  • Android UriPath与File的相互转换(新)一、path->fileFile file= newFile(path);二、 file->pathString path=file.getPath();注意URIUri的区别1URI:是java.net的子类2Uri :是android.net的子类,Uri 不能...
  • Android Uri to Path

    2021-06-02 23:47:07
    起因Android在4.4之后的版本(包括4.4)中,从相册中选取图片返回Uri进行了改动。所以我们无法通过该Uri来取得文件路径,从而解码图片,将其显示出来。在4.3或以下可以直接用Intent.ACTION_GET_CONTENT打开相册;在4.4...
  • 我正在尝试使用...我收到一条错误消息“无效的URI —转义的绝对路径无效”.这个我的URL =“http:// localhost:8080 / test file.txt”private boolean delete(String fileName) {HttpClient client = new...
  • @PathVariable主要用来修饰方法参数,表示此参数为请求URI的变量; 请求URI中的变量,会自动转换为方法参数的类型; 例1: @RequestMapping("/test/{name}") public String testName(@PathVariable String name) { ...
  • * pathuri * @param context * @param imageFile * @return */ public static Uri getImageContentUri(Context context, java.io.File imageFile) { String filePath = imageFile.getAbsolutePath(); ...
  • file-uri-to-pathConvert a file: URI to a file pathAccepts a file: URI and returns a regular file path suitable for use with thefs module functions.InstallationInstall with npm:$ npm install file-uri-t...
  • 文件路径或URI将来自用户输入.目前我只读本地文件public String readFile(String fileName){File file=new File(fileName);BufferedReader bufferedReader = null;try {bufferedReader = new BufferedReader(new ...
  • 48.解决跨yu

    2021-06-29 21:01:24
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录1.引入库 ... uri: lb://gulimall-product predicates: - Path=/api/product/** filters: - RewritePath=/api/(?<s
  • 一、path转fileFile ...二、pathuriUri uri = Uri.parse(path);三、uripath/*** 将URI路径转化为path路径*/public static String getRealPathFromURI(Context context,Uri contentURI) {String result;Cursor ...
  • 笔记记录 ...2、获取路径的代码 @RequestMapping("/quick24") @ResponseBody public String quick24(HttpServletRequest request) { System.out.println("URI:"+request.getRequestURI()); System.out.print..
  • 利用漏洞进行监听 Kali开启监听 命令: use exploit/windows/browser/ms10_018_ie_behaviors set payload windows/meterpreter/reverse_tcp set SRVPORT 80 set URIPATH / set LHOST 192.168.42.131 XP的IP set ...
  • if ("content".equals(scheme)) { // 內容URI path = queryAbsolutePath(context, uri); } else if ("file".equals(scheme)) { // 檔案URI path = uri.getPath(); } return path; } return null; } public static ...
  • Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D at java.net.URI.checkPath(URI.java:1823) at java.net.URI.(URI.java:745) at org.apache.hadoop.fs.Path.initialize(Path....
  • 本问题已经有最佳答案,请猛点这里访问。我有两个URI:http://www.google.de/blank.gifhttp://www.google.de/sub/我想要从http://www.google.de/sub/到...URI.relativize()在这里不工作:/谢谢!这是已知的错...
  • 1.请说出下表中3个URI路径写法是错误的原因。解释的详细一点,,谢谢!!!RequestURIServletUsedServletPathPathInfo/colorapp/redRedServlet/rednull/colorapp/red/RedServlet/red/...1.请说出下表中3个URI路径...
  • 网络上看到过很多种Uri转路径的方法,可基本上都只适用于很少的Uri值,可能没有结果(例如,对于由MediaStore索引的非本地文件),也可能没有可用的结果(例如,对于可移动存储上的文件)。解决方法使用ContentResolver...
  • 今天在写代码时遇到这样一个问题:如何从字符串 "http://job.cnblogs.com/images/job_logo.gif"中得到 "/images/job_logo.gif"?...开始我想到的是 System.IO.Path,代码如下:Path.GetDirectoryName(url) ...
  • 标签: url uri file pathFile to URI:File file = ...;URI uri = file.toURI();File to URL:File file = ...;URL url = file.toURI().URL();URL to File:URL url = ...;File file = new Path(url.getPath()).toFile...
  • Uri uri = data.getData();String[] proj = { MediaStore.Images.Media.DATA };Cursor actualimagecursor = managedQuery(uri,proj,null,null,null);int actual_image_column_index = actualimagecursor.getColumnIn...
  • Hii here is my complete code for taking image from camera or galeery //My variable declaration protected static final int CAMERA_REQUEST = 0; protected static final int ... return Uri.parse(path); }

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 250,539
精华内容 100,215
关键字:

uripath