我正在用php上传文件,并且只想在csv文件中上传它。 我相信我的语法适合内容类型。 当它是一个csv文件时,它总是转到else语句。 我在这里做错了什么?
if (($_FILES["file"]["type"] == "text/csv"))
{
}
else
{
}
如果更改内容类型,则不适用于csv。
之间的确切区别是什么
我一直在随机使用它们,在两个HTTP标头中都找不到任何输出差异?
在Sinatra中,是否可以将content_type 'application/json'
设置为默认值? 因为我正在写一个api。
我正在从服务中下载一些图像,这些图像并不总是包含内容类型,并且不提供我正在下载的文件的扩展名(哦,不要问)。
确定.NET中图像格式的最佳方法是什么?
正在读取这些下载的图像的应用程序需要具有适当的文件扩展名,否则所有地狱都可能会崩溃。
我能找到的最接近的东西是System.Net.Mime.MediaTypeNames
,但这似乎不具备所有功能(例如json),因为它似乎更集中于电子邮件附件。
好的,所以我有一个index.php文件,它必须处理许多不同的文件类型。 我如何猜测基于http://site/image.jpg
的文件类型。
如果我请求http://site/image.jpg
,并且所有请求都通过index.php重定向,如下所示
<?php
include('/www/site'.$_SERVER['REQUEST_URI']);
?>
我将如何使其正常工作?
我应该根据所请求文件的扩展名进行测试,还是可以获取文件类型?
我已经编写了一个PHP脚本来处理文件下载,确定请求哪个文件并设置适当的HTTP标头以触发浏览器实际下载文件(而不是在浏览器中显示文件)。
我现在遇到一个问题,有些用户报告了某些文件被错误标识(因此,无论扩展名如何,浏览器都将其视为GIF图像)。 我猜这是因为我没有在响应标头中设置“ Content-type”。 这种情况最有可能吗? 如果是这样,是否有一个相当通用的类型可以用于所有文件,而不是尝试考虑每种可能的文件类型?
当前,我仅设置值“ Content-disposition:附件; filename = arandomf.ile”
更新:我按照这里的指南建立了一个更健壮的文件下载过程([http://w-shadow.com/blog/2007/08/12/how-to-force-file-download-with-php/ ),],但是在执行脚本和显示浏览器的下载对话框之间有很大的延迟。 谁能找出造成这种情况的瓶颈?
这是我的实现:
/**
* Outputs the specified file to the browser.
*
* @param string $filePath the path to the file to output
* @param string $fileName the name of the file
* @param string $mimeType the type of file
*/
function outputFile($filePath, $fileName, $mimeType = '') {
// Setup
$mimeTypes = array(
'pdf' => 'application/pdf',
'txt' => 'text/plain',
'html' => 'text/html',
'exe' => 'application/octet-stream',
'zip' => 'application/zip',
'doc' => 'application/msword',
'xls' => 'application/vnd.ms-excel',
'ppt' => 'application/vnd.ms-powerpoint',
'gif' => 'image/gif',
'png' => 'image/png',
'jpeg' => 'image/jpg',
'jpg' => 'image/jpg',
'php' => 'text/plain'
);
$fileSize = filesize($filePath);
$fileName = rawurldecode($fileName);
$fileExt = '';
// Determine MIME Type
if($mimeType == '') {
$fileExt = strtolower(substr(strrchr($filePath, '.'), 1));
if(array_key_exists($fileExt, $mimeTypes)) {
$mimeType = $mimeTypes[$fileExt];
}
else {
$mimeType = 'application/force-download';
}
}
// Disable Output Buffering
@ob_end_clean();
// IE Required
if(ini_get('zlib.output_compression')) {
ini_set('zlib.output_compression', 'Off');
}
// Send Headers
header('Content-Type: ' . $mimeType);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
// Send Headers: Prevent Caching of File
header('Cache-Control: private');
header('Pragma: private');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
// Multipart-Download and Download Resuming Support
if(isset($_SERVER['HTTP_RANGE'])) {
list($a, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2);
list($range) = explode(',', $range, 2);
list($range, $rangeEnd) = explode('-', $range);
$range = intval($range);
if(!$rangeEnd) {
$rangeEnd = $fileSize - 1;
}
else {
$rangeEnd = intval($rangeEnd);
}
$newLength = $rangeEnd - $range + 1;
// Send Headers
header('HTTP/1.1 206 Partial Content');
header('Content-Length: ' . $newLength);
header('Content-Range: bytes ' . $range - $rangeEnd / $size);
}
else {
$newLength = $size;
header('Content-Length: ' . $size);
}
// Output File
$chunkSize = 1 * (1024*1024);
$bytesSend = 0;
if($file = fopen($filePath, 'r')) {
if(isset($_SERVER['HTTP_RANGE'])) {
fseek($file, $range);
while(!feof($file) && !connection_aborted() && $bytesSend < $newLength) {
$buffer = fread($file, $chunkSize);
echo $buffer;
flush();
$bytesSend += strlen($buffer);
}
fclose($file);
}
}
}
我正在使用PHP Content-Type
功能:
$to = 'AAAA <postmaster@xxx.xx>';
$subject = 'BBBB';
$message = "CCCC\r\nCCCC CCCC \r CCC \n CCC \r\n CCC \n\r CCCC";
$headers = 'From: DDD<postmaster@xxx.xx>' . "\r\n";
$headers .= "Content-Type: text/html; charset=\"UTF-8\"; format=flowed \r\n";
$headers .= "Mime-Version: 1.0 \r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable \r\n";
mail($to, $subject, $message, $headers);
当我收到这封电子邮件时,它看起来像这样:
CCCC CCCC CCCC CCC CCC CCC CCCC
我期望这样的事情:
CCCC
CCCC CCCC CCC
CCC
CCC
CCCC
它在没有Content-Type
HTTP标头的情况下可以正常工作。 如何制作新行并仍然使用“ Content-Type”声明?
我想从给定的扩展名中获取MIME Content-Type(最好不访问物理文件)。 我已经看到了一些与此有关的问题,可以通过以下方式恢复执行该操作所描述的方法:
我已经使用No.1一段时间了,但是我意识到注册表提供的信息不一致,并且取决于计算机上安装的软件。 某些扩展名(如.zip)不需要指定Content-Type。
解决方案2迫使我将文件放在磁盘上,以便读取第一个字节,这虽然很慢,但可能会得到很好的结果。
第三种方法基于目录服务和所有这些东西,我不太喜欢这种东西,因为我必须添加COM引用,而且我不确定IIS6和IIS7是否一致。 另外,我不知道这种方法的性能。
最后,我不想使用自己的表,但是最后如果我想要平台之间(甚至是Mono)的性能和结果的一致性,似乎是最好的选择。
您是否认为有比使用我自己的表更好的选择,或者其他描述的方法更好? 您的经验是什么?
如何覆盖Nginx中的默认Content-Type? 当前,当我请求01.dae文件时,
Content-Type: application/octet-stream;
我希望它成为
Content-Type: application/xml;
我尝试了类似的东西
location ~* \.dae$ {
types { };
default_type application/xml;
}
和
location ~* \.dae$ {
add_header Content-Type application/xml;
}
但没有任何效果。
JSON具有application/vnd.google.protobuf
作为标准。 对于protobuf,有些人使用application/vnd.google.protobuf
,但我看到有人提议application/vnd.google.protobuf
。 我们是否有RFC或其他标准可以用作参考?
据我所知,他们绝对平等。 但是,浏览一些django文档,我已经发现这段代码:
mimetype
令我惊讶的是两个相处的人。 官方文档能够以实际的方式解决问题:
content_type是mimetype的别名。 从历史上看,这个参数只是 叫做mimetype,但是因为这是 实际上包含的价值 HTTP Content-Type标头,它也可以 包括字符集编码, 这使它不仅仅是一个MIME 型号规格。 如果mimetype是 指定(非None),该值为 用过的。 否则,使用content_type。 如果两者都没有,那么 使用DEFAULT_CONTENT_TYPE设置。
但是,我觉得它不够清楚。 为什么我们使用2种不同的命名(几乎相同)? “Content-Type”只是浏览器请求中使用的名称,并且在外部使用很少吗?
每个人之间的主要区别是什么,以及什么时候调用mimetype
而不是content-type
? 我是傻和语法纳粹吗?
整个问题符合标题。 并添加一些上下文:我不是根据规范所说的问什么是最好的,而是考虑到现在部署的浏览器组合,哪种方法效果最好。
一些数据点:
application/x-javascript
作为其主页上使用的JS。application/x-javascript
。application/x-javascript
通过Ajax库服务提供JavaScript文件。application/x-javascript
来为他们的JS服务。application/x-javascript
作为其主页上提供的JavaScript。当我有这个代码
$.ajax({
type: 'POST',
//contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: 'json'
});
在Fiddler我可以看到以下原始请求
POST http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost:14693/WebSite1/index.html
Content-Length: 9
Origin: http://localhost:14693
Pragma: no-cache
Cache-Control: no-cache
name=norm
但我尝试的是将内容类型从application / x-www-form-urlencoded设置为application / json。 但是这段代码
$.ajax({
type: "POST",
contentType: "application/json",
url: 'http://localhost:16329/Hello',
data: { name: 'norm' },
dataType: "json"
});
生成奇怪的请求(我可以在Fiddler中看到)
OPTIONS http://localhost:16329/Hello HTTP/1.1
Host: localhost:16329
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Origin: http://localhost:14693
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Pragma: no-cache
Cache-Control: no-cache
这是为什么? 什么是OPTIONS什么时候应该在那里POST? 我的content-type设置为application / json在哪里? 并且请求参数由于某种原因而消失了。
更新1
在服务器端,我有非常简单的RESTful服务。
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class RestfulService : IRestfulService
{
[WebInvoke(
Method = "POST",
UriTemplate = "Hello",
ResponseFormat = WebMessageFormat.Json)]
public string HelloWorld(string name)
{
return "hello, " + name;
}
}
但由于某种原因,我无法用参数调用此方法。
更新2
很抱歉没有回答这么久。
我已将这些标头添加到我的服务器响应中
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: POST, GET, OPTIONS
它没有帮助,我有来自服务器的方法不允许错误。
这是我的小提琴手所说的
所以,现在我可以确定我的服务器接受POST,GET,OPTIONS(如果响应头像我期望的那样工作)。 但为什么&#34;方法不允许&#34;?
在服务器的WebView响应中(您可以在上面的图片中看到Raw响应)看起来像这样
有没有办法找出Linux bash脚本中的文件的MIME类型(或称为&#34; Content-Type&#34;?)?
我需要它的原因是因为ImageShack似乎需要它来上传文件,因为它将某个.png文件检测为application/octet-stream
文件。
我检查了文件,它确实是一个PNG图像:
$ cat /1.png
?PNG
(with a heap load of random characters)
这给了我错误:
$ curl -F "fileupload=@/1.png" http://www.imageshack.us/upload_api.php
<links>
<error id="wrong_file_type">Wrong file type detected for file 1.png:application/octet-stream</error>
</links>
这有效,但我需要指定MIME-TYPE。
$ curl -F "fileupload=@/1.png;type=image/png" http://www.imageshack.us/upload_api.php
假设我编写了一个REST服务,其目的是将新数据项添加到系统中。
我计划发帖到
http://myhost/serviceX/someResources
假设有效,我应该使用什么样的响应代码? 我可以回复什么内容。
我正在查看HTTP响应代码的定义并查看以下可能性:
200:返回描述或包含动作结果的实体;
201:这意味着创建。 含义*请求已完成,并导致创建新资源。 新创建的资源可以由响应实体中返回的URI引用,其中由Location头字段给出的资源的最具体URI。 响应应该包括一个实体,其中包含资源特征和位置的列表,用户或用户代理可以从中选择最合适的资源特征和位置。 实体格式由Content-Type头字段中给出的媒体类型指定。*
后者听起来更符合Http规范,但我一点也不清楚
回应应该包括一个实体 包含资源列表 特点和地点
手段。
建议?解释?
我正在查找标准库(如apache commons,jax,jboss,javax)中的接口或枚举列出所有标准mime类型(aka内容类型)的值。
这个接口不应该与其他类太深,以至于难以将整个串包含为gwt源代码。
例如
interface ContentType{
String JSON = "Application/JSON";
blah ... blah ...
}
要么,
enum ContentType{
JSON("Application/JSON"),
blah ... blah ...
}
我在这里尝试做的是获取给定URL的标题,以便我可以确定MIME类型。 我希望能够看到http://somedomain/foo/
是否会返回HTML文档或JPEG图像。 因此,我需要弄清楚如何发送HEAD请求,以便我可以读取MIME类型而无需下载内容。 有谁知道这样做的简单方法?
我必须在将其传递给HTTP请求之前验证Content-Type
标头值。
是否有针对Content-Type
的所有可能值的特定列表?
否则,有没有办法在HTTP请求中使用它之前验证内容类型?