我正在使用 http.FileServer 来提供 mp3 文件的目录,然后我的模板src在 javascript 中。但是,响应使用Content-Type text/html代替audio/mpeg。如何设置 FileServer 响应的 mime 类型,我看到了这个问题Setting the 'charset' property on the Content-Type header in the golang HTTP FileServer,但我仍然不确定如何覆盖 mime 类型。
我的代码如下所示:
fs := http.FileServer(http.Dir(dir))
http.Handle("/media", http.StripPrefix("/media", fs))
http.HandleFunc("/", p.playlistHandler)
http.ListenAndServe(":5177", nil)
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
HTTP "Content-Type" of "text/html" is not supported. Load of media resource http://localhost:5177/media/sample1.mp3 failed.
Run Code Online (Sandbox Code Playgroud) 我的服务器托管要下载的大文件(文件可能存储在不同的文件服务器中,但不会存储在 Web 服务器中)。我的目的是让浏览器使用部分下载,以便网络服务器可以获取文件的一小部分而不是整个文件。
但是浏览器(chrome 66)发送的第一个 HTTP GET 请求没有Range. 所以我必须回复Status: 200 OK。
GET http://fakefile/falke HTTP/1.1
Host: fakefile
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Run Code Online (Sandbox Code Playgroud)
HTTP/1.1 200 OK
Date: Tue, 12 Jun 2018 04:58:58 GMT
Content-Type: text/plain
Content-Length: 8205926
Connection: keep-alive
Content-Range: bytes 0-1048575/8205926
Content-Disposition: attachment; filename="301050.11051.input.txt"
Accept-Ranges: bytes
Run Code Online (Sandbox Code Playgroud)
的Content-Length是整个文件的大小,Content-Range是块的大小。
结果:浏览器认为 chunk 是整个文件,不再有 HTTP range …
亲爱的Stackoverflow用户,
我想知道如何在文件上传到文件服务器后查找文件的URL,以便我可以在ex中查看它.苹果浏览器.
如果你在 Go 中使用 http.FileServer 像:
func main() {
port := flag.String("p", "8100", "port to serve on")
directory := flag.String("d", ".", "the directory of static file to host")
flag.Parse()
http.Handle("/", http.FileServer(http.Dir(*directory)))
log.Printf("Serving %s on HTTP port: %s\n", *directory, *port)
log.Fatal(http.ListenAndServe(":"+*port, nil))
}
Run Code Online (Sandbox Code Playgroud)
然后访问一个目录会给你一个文件列表。通常这对于 Web 服务是禁用的,而是以 404 响应,我也希望这种行为。
http.FileServer 没有此 AFAIK 的选项,我在这里看到了解决此问题的建议方法https://groups.google.com/forum/#!topic/golang-nuts/bStLPdIVM6w他们所做的是包装 http.FileSystem键入并实现自己的 Open 方法。但是,当路径是目录时,这不会给出 404,它只会给出一个空白页面,并且不清楚如何修改它以适应这一点。这就是他们所做的:
type justFilesFilesystem struct {
fs http.FileSystem
}
func (fs justFilesFilesystem) Open(name string) (http.File, error) {
f, err := fs.fs.Open(name)
if err != nil { …Run Code Online (Sandbox Code Playgroud) 我正在尝试运行两台文件服务器,其中一台index.html在ui文件夹中提供服务,另一台提供其他一些静态文件,如下面的代码:
package main
import (
"log"
"net/http"
)
func main() {
srv := http.NewServeMux()
// File server 1
uiServer := http.FileServer(http.Dir("./ui"))
srv.Handle("/", uiServer)
// File server 2
staticFilesServer := http.FileServer(http.Dir("./files"))
srv.Handle("/files", staticFilesServer)
if err := http.ListenAndServe(":8080", srv); err != nil {
log.Fatal(err)
}
}
Run Code Online (Sandbox Code Playgroud)
两个 fileServer 对象的定义方式完全相同,第一个 (uiServer) 工作正常,但第二个 (staticFilesServer on localhost:8080/files) 给我 404。
我缩小了问题范围并删除了第一个(工作文件服务器),就像下面的代码一样:
package main
import (
"log"
"net/http"
)
func main() {
srv := http.NewServeMux()
staticFilesServer := http.FileServer(http.Dir("./files"))
srv.Handle("/files", staticFilesServer)
if err …Run Code Online (Sandbox Code Playgroud) 我有一个关于上传到我的网站的文件的设计决定:我可以将它们存储在我的文件服务器上,或者我可以将它们存储在我的数据库中的blob(MSSQL 2005).如果它对设计决定有任何影响,这些文件是保密的,必须有一定程度的保护.
我想到的考虑因素是:
我非常感谢这里的一些建议.谢谢!
我正在将图像上传到特定文件夹位置的FTP服务器.代码工作正常.但是当我查看上传的图像时,我得到了无法打开的损坏的图像文件.对于少数图像文件,文件中的图像被破坏.我不明白为什么会这样.
以下是我尝试的可行代码:
if(!empty($_FILES['student_image']['name'])) {
$ext = pathinfo($_FILES['student_image']['name'], PATHINFO_EXTENSION);
$student_image_name = 'student_'.$student_data['student_id'].'.'.$ext;
$ftp_server="56.215.30.91";
$ftp_user_name="myservercreds";
$ftp_user_pass="MyServerCreds";
$file = $_FILES['student_image']['tmp_name'];//file to be uploaded to FTP server
$remote_file = "/Students/".$student_image_name;
// set up basic connection
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if($login_result) {
if(!is_dir('ftp://myservercreds:MyServerCreds@56.215.30.91/Students')) {
ftp_mkdir($conn_id, "/Students");
ftp_chmod($conn_id, 0777, '/Students');
}
if(!file_exists("/Students/".$student_image_name))
$file_upload_status = ftp_put($conn_id, $remote_file, $file, FTP_ASCII);
}
// close the connection
ftp_close($conn_id);
}
Run Code Online (Sandbox Code Playgroud)
我不知道在完成上传后上传到FTP服务器时图像文件何时被破坏.
使用SimpleHTTPServerPython 中的模块构建一个简单的文件服务器,但是我在尝试从连接的客户端获取 IP 时遇到了问题。这是我所拥有的..
import SimpleHTTPServer
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
httpd = SocketServer.TCPServer(("", 8080), Handler)
print "Serving local directory"
while True:
httpd.handle_request()
print Handler.client_address[0]
Run Code Online (Sandbox Code Playgroud)
当客户端连接时,我得到..
AttributeError:SimpleHTTPRequestHandler 类没有属性“client_address”
我知道这是因为我还没有实例化这个类,但是有没有另一种方法可以从客户端获取 IP 而不必创建处理程序实例?建立连接时,客户端的 IP 会输出到控制台,我只需要一种在脚本中获取该 IP 的方法。
谢谢!
我http.FileServer在 Go 中使用将一些静态文件提供到目录中。
这是我使用 mux 作为路由器来映射它的方式:
r.PathPrefix("/download").Handler(http.StripPrefix("/download", http.FileServer(http.Dir(dirPath)))).Methods("GET")
Run Code Online (Sandbox Code Playgroud)
其中dirPath是我的文件系统中目录的绝对路径。
现在,当使用 localhost:8080/download 询问目录列表时,它似乎工作正常,因为它返回这样的页面
<pre>
<a href="a.xml">a.xml</a>
<a href="b.xml">b.zip</a>
</pre>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些链接已损坏,因为我希望将它们映射到例如localhost:8080/download/a.xml,而文件服务器将它们映射到localhost:8080/a.xml。
如何使我的目录列表/download在链接中保留路径前缀?
我是 Golang 新手,现在我正在编写解析某些页面的小应用程序。我得到索引页:
<form action="/" method='POST'>
Enter credentials:<br>
Login: <input type="text" name="login" >
<br>
Password: <input type="password" name="password" >
<br>
Search link:<br>
<input type="text" name="link" >
<br>
<input type="submit" value="Submit">
</form>
Run Code Online (Sandbox Code Playgroud)
因此,单击“提交”按钮后,它会进入解析页面(使用 tebeca/selenium pkg),最后将数据写入 result.csv,如下所示
func writeToCSV(users []linkedinUser) {
data := users
enc := struct2csv.New()
rows, err := enc.Marshal(data)
if err != nil {
fmt.Printf("ERROR marshaling file, %s", err)
}
file, err := os.Create("result.csv")
if err != nil {
fmt.Printf("ERROR creating file, %s", err)
}
defer file.Close()
writer := csv.NewWriter(file) …Run Code Online (Sandbox Code Playgroud) fileserver ×10
http ×6
go ×5
ftp ×2
url ×2
blob ×1
content-type ×1
csv ×1
download ×1
file-upload ×1
filezilla ×1
ip ×1
javascript ×1
mime ×1
php ×1
python ×1
sql-server ×1