enctype='multipart/form-data'HTML表单中的含义是什么?我们何时应该使用它?
我需要一个实时测试服务器,它通过HTTP GET接受我对基本信息的请求,并允许我POST(即使它真的没有做任何事情).这完全是出于测试目的.
一个很好的例子是在这里.它很容易接受GET请求,但我也需要一个接受POST请求的请求.
有没有人知道我可以发送虚拟测试消息的服务器?
我正在执行一个使用Python请求库上传文件的简单任务.我搜索了Stack Overflow,似乎没有人遇到同样的问题,即服务器没有收到该文件:
import requests
url='http://nesssi.cacr.caltech.edu/cgi-bin/getmulticonedb_release2.cgi/post'
files={'files': open('file.txt','rb')}
values={'upload_file' : 'file.txt' , 'DB':'photcat' , 'OUT':'csv' , 'SHORT':'short'}
r=requests.post(url,files=files,data=values)
Run Code Online (Sandbox Code Playgroud)
我正在用我的文件名填充'upload_file'关键字的值,因为如果我把它留空,它会说
Error - You must select a file to upload!
Run Code Online (Sandbox Code Playgroud)
现在我明白了
File file.txt of size bytes is uploaded successfully!
Query service results: There were 0 lines.
Run Code Online (Sandbox Code Playgroud)
仅当文件为空时才会出现.所以我不知道如何成功发送我的文件.我知道该文件有效,因为如果我去这个网站并手动填写表格,它会返回一个很好的匹配对象列表,这就是我所追求的.我非常感谢所有提示.
其他一些线程相关(但没有回答我的问题):
我正在开发一个iPhone应用程序,它可以生成包含多个图像文件的多部分HTTP请求.
看起来在服务器端发生的事情是,其中一个图像正在被正确解析,但其他两个文件则没有.
任何人都可以发布包含多个图像文件的示例HTTP多部分请求吗?
不使用任何形式,我可以<input type="file">使用jQuery使用POST方法将文件/文件发送到'upload.php'.输入标记不在任何表单标记内.它独立.所以我不想使用像'ajaxForm'或'ajaxSubmit'这样的jQuery插件.
我有一个Web应用程序,用户需要上传.zip文件.在服务器端,我正在检查上传文件的mime类型,以确保它是application/x-zip-compressed或application/zip.
在Firefox和IE上,这对我来说很好.然而,当一个同事测试它时,它在Firefox上失败了(发送mime类型就像是" application/octet-stream")但是在Internet Explorer上工作.我们的设置似乎是相同的:IE8,FF 3.5.1禁用所有附加组件,Win XP SP3,WinRAR安装为本机.zip文件处理程序(不确定是否相关).
所以我的问题是:浏览器如何确定要发送的mime类型?
请注意:我知道mime类型是由浏览器发送的,因此不可靠.我只是检查它是为了方便 - 主要是为了给出一个比你通过尝试打开非zip文件作为zip文件获得的更友好的错误消息,并避免加载(可能是沉重的)zip文件库.
好吧,我在这个领域是全新的,并通过一些教程,我发现在PHP上传文件时,它将它们存储在一个临时位置.
$file_temp=$_FILES['file']['tmp_name'];
$file_loc="Upload".$file_name;
move_uploaded_files($file_temp,$file_loc);
Run Code Online (Sandbox Code Playgroud)
现在为什么PHP不允许直接将文件上传到所需的位置?为什么它们存储在扩展名为.tmp的临时位置,我们从这个策略中获得了什么好处?
我试图创建一个文件上传表单并检查PHP文档以刷新我对这个主题的记忆.以下是相关文章的链接.我突然注意到了这条消息:
MAX_FILE_SIZE隐藏字段(以字节为单位)必须位于文件输入字段之前,其值是PHP接受的最大文件大小.应始终使用此表单元素,因为它可以节省用户等待传输大文件的麻烦,只是发现它太大而传输失败.请记住:在浏览器端愚弄此设置非常简单,因此不要依赖此功能阻止更大尺寸的文件.它仅仅是应用程序客户端用户的便利功能.但是,最大大小的PHP设置(在服务器端)不能被愚弄.
好的......说什么?首先,它告诉它必须在文件上载字段之前.然后它告诉我们这仅仅是为了方便.而且 - 无论如何它都在客户端,所以任何人都可以搞砸它.谷歌搜索后,我也发现没有已知浏览器支持它的信息.
WTF?为什么它说它必须在文件上传字段之前,如果它(似乎所有意图和目的)绝对没有意义?我应该把它放在我的HTML中吗?
所以,我正在上传一个文件,然后下载它......但是上传标题中的Content-Length与文件大小不匹配.我猜这个计算和传输涉及到其他一些数据,但具体到底是什么?如何从Content-Length获得准确的文件大小?它甚至可能吗?
我知道有边界,也许还有其他一些东西,但检查一下:
5380216 - 5379906 = 310
"----WebKitFormBoundaryeoFyqD4zr6smwYDG".size
? 38
Run Code Online (Sandbox Code Playgroud)
所以边界大小是38 ... 310有一些5,10,31的LCD ...那些不管怎么用38以任何方式......我迷路了!
文件大小:
-rw-r--r--@ 1 williamcotton staff 5379906 Jul 2 12:02 testfile-downloaded.zip
-rw-r--r--@ 1 williamcotton staff 5379906 Jun 8 14:23 testfile-uploaded.zip
Run Code Online (Sandbox Code Playgroud)
HTTP标头
{
host: 'localhost:8887',
connection: 'keep-alive',
'content-length': '5380217',
'cache-control': 'max-age=0',
origin: 'http://localhost:8887',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1193.0 Safari/537.1',
'content-type': 'multipart/form-data; boundary=----WebKitFormBoundaryeoFyqD4zr6smwYDG',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
referer: 'http://localhost:8887/',
'accept-encoding': 'gzip,deflate,sdch',
'accept-language': 'en-US,en;q=0.8',
'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
}
Run Code Online (Sandbox Code Playgroud)
TL;博士
文件大小为5379906
Content-Length报告为5380216
为什么?
我正在尝试将图像上传到Express服务器.我并不完全确定如何做到这一点,但继承人什么我已经从我已经能够从MDN,拿起了express,react-dropzone和multer文档.react-dropzone当注销时req.file,Multer似乎没有从中获取FormData对象返回undefined.
var storage = multer.diskStorage({
destination: './public/users',
filename: function (req, file, cb) {
switch (file.mimetype) {
case 'image/jpeg':
ext = '.jpeg';
break;
case 'image/png':
ext = '.png';
break;
}
cb(null, file.originalname + ext);
}
});
var upload = multer({storage: storage});
app.use(upload.single('photo'));
app.post('/uploadUserImage', function (req, res) {
console.log(JSON.stringify(req.body.photo)) // form fields
console.log(req.photo) // form files
console.log(req.file) // form files
res.send(req.body.photo);
});
Run Code Online (Sandbox Code Playgroud)
function uploadImage (image) {
var formData = new …Run Code Online (Sandbox Code Playgroud) http ×3
file ×2
file-upload ×2
html ×2
http-headers ×2
php ×2
browser ×1
express ×1
forms ×1
javascript ×1
jquery ×1
mime-types ×1
multer ×1
multipart ×1
node.js ×1
post ×1
python ×1
reactjs ×1
upload ×1
webforms ×1