使用CURL将文件上传到网站

5

我尝试在Windows CMD中使用cURL将文件上传到网站。HTML代码如下:

<form enctype="multipart/form-data" action="/Filebrowser?Path=/S71500/" method="POST" onsubmit="return checkUploadFile()">
<td><input id="filebrowser_upload_filename" type="file" name="filename" size="30" maxlength="80" style="background-color: transparent;"></td>
<td><input type="submit" value="Datei laden"></td> 
</form>

我正在使用的命令是:

curl -F "filename=@/Users/Me/FILE.so" http://localhost:8080

失败消息是:
Warning: setting file FILE.so failed!
curl: (26) read function returned funny value

我做错了什么?

有时候在命令提示符上发布格式参数时,如果我删除引号,它就能正常工作。但我猜这取决于你服务器端的代码,它是否能处理这些符号。 - Dylan
4个回答

5

对我来说,这是一个权限问题。Curl无法读取我的文件,因为它不可读。尝试:

sudo chmod a+r /path/to/your/file

同时,请确保您已经登录为root或该文件的所有者。
ls -l /path/to/your/file

将会向您提供有关权限、所有权和组的信息,例如:

-rw-r--r-- 1 me users 792139 Jul  2 11:23 file.txt

file.txt 可以被 root 用户,"me" 用户以及 "users" 组的成员读取 - 只允许 root 用户进行写入操作,且任何人都不能执行它。该文件大小为 792139 字节。


1
对我来说基本上是同样的问题:在curl命令中文件名有误,导致无法读取文件。 - Samik R

4

我也遇到了同样的错误,当我试图使用curl上传时:

Warning: setting file testimage.png’  failed!

问题出在我的 curl 命令行中包含了从浏览器复制粘贴的不可见字符。我将命令行复制到像 Sublime Text 这样的文本编辑器中,然后再复制回终端:突然一切都正常了。

可能是某种 UTF8 / ASCII 问题。


0

我们需要使用--form-string,而不是-F。这样它才能正常工作。


-3

您应该将以下 PHP 代码放置在您服务器的根目录中

upload.php

<?php
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['filename']['name']); 
if(move_uploaded_file($_FILES['filename']['tmp_name'], $target_path)) {
echo "The file ".  basename( $_FILES['filename']['name']). 
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
?>

请记住,您必须使用大写字母 F(表示表单)作为参数。小写字母 f 表示失败。

如果您在服务器端使用apache2/lighttpd等,可能需要上传upload.php。如果您使用的是flask和其他框架,则问题可能出现在其他地方。在我的情况下,是UTF8 / ASCII问题-输入并且工作正常。 - shamik
curl 抱怨它在读取文件时出现问题。这个答案试图修复服务器。我认为这完全不相关。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接