2015-04-02 118 views
-1

我试图像一个URL来获取文件的名称:如何获取服务器上文件的实际名称?

http://www.example.com/to/the/path/File.txt

在java中的:

public String getFileName(URL url) {  
    String filename = url.getFile();  
    return filename.substring(filename.lastIndexOf('/')+1); 
} 

但是如何从一个文件的实际文件名:

https://docs.google.com/uc?export=download&id=0BwScoO2FIDnQQlF2cHVLbHBjQzg
(它是一个公共共享我的谷歌驱动器上的文件。)

我经常看到,当我把这类在我的web浏览器的地址栏中的URL,它能够识别该文件的名称,并保存其实际的文件名称。在java中可能吗?

谢谢!

+0

发送HTTP请求并读取“Content-Disposition”标头(如果有的话)。 – SLaks 2015-04-02 14:48:25

+0

如果您要与Google云端硬盘进行互动 - https://developers.google.com/api-client-library/java/apis/drive/v2,则可能必须使用Google Drive API才能完成此操作。 – LittlePanda 2015-04-02 15:25:27

回答

1

好吧,简单地说,你需要调查究竟是什么引起的。获取CURL,看看发生了什么事情:

curl -D - -o /dev/null -L "https://docs.google.com/uc?export=download&id=0BwScoO2FIDnQQlF2cHVLbHBjQzg" 

,会给你这样的:

Content-Type: text/html; charset=UTF-8 
    Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
    Pragma: no-cache 
    Expires: Fri, 01 Jan 1990 00:00:00 GMT 
    Date: Fri, 03 Apr 2015 17:42:47 GMT 
    Location: https://doc-0c-8k-docs.googleusercontent.com/docs/securesc/ha0ro937gcuc7l7deffksulhg5h7mbp1/m2vr72uv54vrhd59tvsm5ellda89n0s6/1428076800000/17869486772410674836/*/0BwScoO2FIDnQQlF2cHVLbHBjQzg?e=download 
    Set-Cookie: NID=67=fxFK6wjqCslAMuLajOnHKWYlkVAJDG6gMzoQnsDZI2wkd5QlP7meP8tDQJEQk9veY0UUOtSZWAjM_JbHAOMcJavkHU2B6-VDUo3jRpBQSm0moWVmN689L-I1vKgGJoVK;Domain=.google.com;Path=/;Expires=Sat, 03-Oct-2015 17:42:47 GMT;HttpOnly 
    P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info." 
    X-Content-Type-Options: nosniff 
    X-Frame-Options: SAMEORIGIN 
    X-XSS-Protection: 1; mode=block 
    Server: GSE 
    Alternate-Protocol: 443:quic,p=0.5 
    Accept-Ranges: none 
    Vary: Accept-Encoding 
    Transfer-Encoding: chunked 

    HTTP/1.1 200 OK 
    Access-Control-Allow-Origin: * 
    Access-Control-Allow-Credentials: false 
    Access-Control-Allow-Headers: Accept, Accept-Language, Authorization, Cache-Control, Content-Disposition, Content-Encoding, Content-Language, Content-Length, Content-MD5, Content-Range, Content-Type, Date, GData-Version, Host, If-Match, If-Modified-Since, If-None-Match, If-Unmodified-Since, Origin, OriginToken, Pragma, Range, Slug, Transfer-Encoding, X-ClientDetails, X-GData-Client, X-GData-Key, X-Goog-AuthUser, X-Goog-PageId, X-Goog-Encode-Response-If-Executable, X-Goog-Correlation-Id, X-Goog-Request-Info, X-Goog-Experiments, x-goog-iam-role, x-goog-iam-authorization-token, X-Goog-Spatula, X-Goog-Upload-Command, X-Goog-Upload-Content-Disposition, X-Goog-Upload-Content-Length, X-Goog-Upload-Content-Type, X-Goog-Upload-File-Name, X-Goog-Upload-Offset, X-Goog-Upload-Protocol, X-Goog-Visitor-Id, X-HTTP-Method-Override, X-JavaScript-User-Agent, X-Pan-Versionid, X-Origin, X-Referer, X-Upload-Content-Length, X-Upload-Content-Type, X-Use-HTTP-Status-Code-Override, X-YouTube-VVT, X-YouTube-Page-CL, X-YouTube-Page-Timestamp 
    Access-Control-Allow-Methods: GET,OPTIONS 
    Content-Type: application/zip 
    Content-Disposition: attachment;filename="All.zip";filename*=UTF-8''All.zip 
    Date: Fri, 03 Apr 2015 17:42:47 GMT 
    Expires: Fri, 03 Apr 2015 17:42:47 GMT 
    Cache-Control: private, max-age=0 
    X-Goog-Hash: crc32c=yKvC2Q== 
    Transfer-Encoding: chunked 
    Server: UploadServer ("Built on Mar 27 2015 13:04:19 (1427486659)") 
    Alternate-Protocol: 443:quic,p=0.5 

在这里,你可以看到:

所以,现在你想自动完成这个,也许 - 和this link会帮助你。

快乐学习!

0

您可以创建File对象类并调用getName()方法来获取文件的绝对名称。

File file = new File("http://www.example.com/to/the/path/File.txt"); 
    System.out.println(file.getName()); 

如果你没有文件和谷歌文件路径的绝对路径,你不能获取文件名不是绝对的文件路径。

+0

谢谢先生,但当我们在地址栏中放入那种“URL”时,**网页浏览器**和**下载管理器**能够获取实际的文件名。您可以通过点击URL(由我给出)来检查。它不会将该文件保存为“uc”,而是保存为“All.zip”。 – 2015-04-03 17:47:07

相关问题