根据这个链接http://docs.aws.amazon.com/aws-sdk-php/v2/guide/service-s3.html,我可以轻松地创建一个预先指定的链接,只需将生命周期添加到getObjectUrl
$signedUrl = $client->getObjectUrl($bucket, 'data.txt', '+10 minutes');
// > https://my-bucket.s3.amazonaws.com/data.txt?AWSAccessKeyId=[...]&Expires=[...]&Signature=[...]
Run Code Online (Sandbox Code Playgroud)
但是我得到一个简单的URL,你知道,没有awsaccesskeyid和expires参数,
这是我的代码:
$bucket = 'imagenesfc';
$keyname = 'NASimagenes/codigoBarraBoleto/1001000098.png';
$filepath = 'NASimagenes/codigoBarraBoleto';
// Instantiate the client.
$s3 = S3Client::factory(array(
'version' => 'latest',
'region' => 'us-west-1'
));
$signedUrl = $s3->getObjectUrl($bucket, $keyname,'+10 minutes');
// > https://my-bucket.s3.amazonaws.com/data.txt?AWSAccessKeyId=[...]&Expires=[...]&Signature=[...]
echo $signedUrl."<br>";
Run Code Online (Sandbox Code Playgroud)
编辑:我有AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY作为环境变量
我的回声看起来像:
https://s3-us-west-1.amazonaws.com/imagenesfc/NASimagenes/codigoBarraBoleto/1001000098.png
怎么了?
我只是问这个,因为我已经阅读了很多关于加密AES加密的帖子2天了,就在我以为我得到它的时候,我意识到我根本没有得到它.
这篇文章是我最接近我的问题,我有完全相同的问题,但没有答案:
我尝试过很多方面,但我没有做对.
首先
我正在获取已经加密的字符串(我只获得了代码以了解它们是如何进行的),因此修改加密方式不是一种选择.这就是为什么所有类似的问题对我都没有用.
第二
我有权访问密钥,我可以修改它(所以如果需要,调整长度是一个选项).
加密在CryptoJS上完成,它们将加密的字符串作为GET参数发送.
GetParamsForAppUrl.prototype.generateUrlParams = function() {
const self = this;
return new Promise((resolve, reject) => {
const currentDateInMilliseconds = new Date().getTime();
const secret = tokenSecret.secret;
var encrypted = CryptoJS.AES.encrypt(self.authorization, secret);
encrypted = encrypted.toString();
self.urlParams = {
token: encrypted,
time: currentDateInMilliseconds
};
resolve();
});
};
Run Code Online (Sandbox Code Playgroud)
我可以使用CryptoJS在javascript上轻松解密这个:
var decrypted = CryptoJS.AES.decrypt(encrypted_string, secret);
console.log(decrypted.toString(CryptoJS.enc.Utf8));
Run Code Online (Sandbox Code Playgroud)
但出于安全考虑,我不想在Javascript上这样做,所以我试图在Java上解密它:
String secret = "secret";
byte[] cipherText = encrypted_string.getBytes("UTF8");
SecretKey secKey = new SecretKeySpec(secret.getBytes(), "AES");
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.DECRYPT_MODE, …Run Code Online (Sandbox Code Playgroud) 这是我在网站上的第二个问题,就像往常一样,我花了几个小时阅读了很多相关的问题,最相关的两个问题是:
和
我主要关注第二个选项,因为php已经有了一个XSLTProcessor库,但遗憾的是它只支持XSLT 1.0而且我看起来支持2.0,所以它似乎是正确的选择,但是在安装PEAR并尝试安装XML_XSLT2Processor之后,阅读多篇(1,2,3,那些我目前拥有的话题开放)和AltovaXML了商业和PEAR如此越野车,我决定去与第一个选项.
但我真的不懂Java,但我会试一试,但在开始之前我决定先问(加上帖子有点过时了).
有没有其他更好的方法来管理PHP的XSLT 2.0?
我正试图在registerStreamWrapper上捕获错误的密钥异常,而它只是没有发生.
我的问题是在尝试验证对象是否存在时产生的,如果有人打电话帮助我(最好的方法),会很棒,但这是另一个问题.回到问题所在.
我正在使用此代码来检查对象是否存在使用registerStreamWrapper:
try{
$s3Client = new \Aws\S3\S3Client($sharedConfig);
$s3Client->registerStreamWrapper();
$file = 's3://'."mybucket".'/'."testpath/testpic.jpg";
if(file_exists($file)){
echo "true";
}else{
echo "false";
}
} catch (S3Exception $e) {
// Catch an S3 specific exception.
echo $e->getMessage();
} catch (AwsException $e) {
// This catches the more generic AwsException. You can grab information
// from the exception using methods of the exception object.
echo $e->getAwsRequestId() . "\n";
echo $e->getAwsErrorType() . "\n";
echo $e->getAwsErrorCode() . "\n";
}
Run Code Online (Sandbox Code Playgroud)
如果我提供了错误的密钥,它只返回false.无论如何都要验证访问密钥ID和秘密访问密钥?这会让我的生活变得如此轻松.
在这里找不到任何东西:http://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html或这里:http://docs.aws …
我想要做的是通过智能手机网络摄像头在我的移动应用程序中通过自拍验证用户身份。
所以我制作了一个小型 Web 应用程序,只是为了使用 Face API 测试 microsft azure 认知服务。我拍了2张照片。我使用 Face-Detect 获取两张图片 faceIds,然后将两个 faceIds 与 Face-Verify 进行比较,如果它们是同一个人,API 会以真值和置信度数响应,否则为 false。
问题是,在安全方面,如果我拍一张照片,假设我拍了一张自拍照,然后我用手机用网络摄像头拍了一张自拍照,它确实检测到了人脸,这是我的脸,然后我用网络摄像头给自己拍张照片,因此,当我使用 Face - Verify 时,它返回 true。
所以,如果我想用它作为身份验证,这是一个巨大的安全风险。我想知道是否有办法防止这种情况。
所以,我遵循了本指南的所有内容,是的,我能够发送电子邮件,但我正在尝试添加密件抄送电子邮件,因为它的列表很长,我不希望它们显示在电子邮件的收件人列表中。
使用 PHPMailer 发送时一切正常,这个问题似乎可以解决我的问题,但尽管我已经尝试过,但我还没有找到答案。
我现在是怎么做的:
$client = getClient();
if (is_string($client)){
exit ($client);
}
$service = new Google_Service_Gmail($client);
$user = 'me';
$strSubject = 'Correo GMail API' . date('M d, Y h:i:s A');
$strRawMessage = "From: Lauro Campos<jlcampost@concredito.com.mx>\r\n";
$strRawMessage .= "To: Metro Gio <greyeso@concredito.com.mx>\r\n";
$strRawMessage .= "Bcc: <cjlindorv@concredito.com.mx>,<cfgonzalezr@concredito.com.mx>,<jlcampost@concredito.com.mx>\r\n";
$strRawMessage .= 'Subject: =?utf-8?B?' . base64_encode($strSubject) . "?=\r\n";
$strRawMessage .= "MIME-Version: 1.0\r\n";
$strRawMessage .= "Content-Type: text/html; charset=utf-8\r\n";
$strRawMessage .= 'Content-Transfer-Encoding: quoted-printable' . "\r\n\r\n";
$strRawMessage .= "mensaje <b>de prueba!\r\n";
// The …Run Code Online (Sandbox Code Playgroud) 在问这个问题之前,我做了很多研究,也做了很多测试,像往常一样,我不喜欢仅仅因为这个问题就问。
我无法使用 java 创建在浏览器中显示文件 (content-disposition:inline) 的签名 URL。
当我使用 PHP sdk 执行此操作时,没有遇到任何问题,我将签名的 url 复制并粘贴到浏览器中,文件就会显示在浏览器中。但是当对同一个文件使用java时,该文件会被下载。
在这篇文章中,它提到了一些关于清除元数据和附加“&response-content-disposition=inline”到签名网址的内容,谷歌云文档中也提到了这一点。
我尝试了多种方法,但我无法使其工作,当我按照文档中的指定附加“&response-content-disposition=inline”时,出现以下错误:
<Code>SignatureDoesNotMatch</Code>
<Message> The request signature we
calculated does not match the signature you provided. Check your
Google secret key and signing method. </Message>
Run Code Online (Sandbox Code Playgroud)
但它说这些参数不包含在签名的计算中,所以我不知道发生了什么。
在我尝试过的代码中:
(transformed to kotlin)
val blobInfo = BlobInfo.newBuilder(BlobId.of(configuracion.bucket, fileName)).build()
val newMetadata: MutableMap<String, String> = HashMap()
newMetadata["contentDisposition"] = "inline"
blobInfo.toBuilder().setMetadata(newMetadata).build()
val signUrl = storage.signUrl(blobInfo, expiration, TimeUnit.MILLISECONDS,Storage.SignUrlOption.withV4Signature())
return signUrl.toString()
Run Code Online (Sandbox Code Playgroud)
但没有运气。
我认为应该有一种非常直接的方法来将内容处置设置为我想要的任何内容,但情况似乎并非如此。
我生成签名 url 的方法很简单: …
所以,你可以通过几种方法保存表单文件,我猜,我使用2,但我真的不知道何时使用哪个.我有两个相同的代码:
1 - 这将我的表单文件写入指定的路径.
FormFile archivo = myForm.getArchivo();
File newFile = new File(path, archivo.getFileName());
FileOutputStream fos = new FileOutputStream(newFile);
fos.write(archivo.getFileData());
fos.flush();
fos.close();
Run Code Online (Sandbox Code Playgroud)
2 - 这也是.
FormFile archivo = myForm.getArchivo();
InputStream in = archivo.getInputStream();
OutputStream bos = new FileOutputStream(path + "archivo.ext");
int byteRead = 0;
byte[] buffer = new byte[8192];
while ((byteRead = in.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, byteRead);
}
bos.close();
in.close();
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,它们中的两个之间有什么区别,我何时应该使用哪个?
我很擅长使用jQuery(我很喜欢常规的js),而且我很难过,真的很难过,想弄明白这一点,我已经读了几天,因为我经常发现我自己的答案,但这已经走得太远了.
我不知道,为什么,这样编码时:
$(document).ready(slideShow());
function slideShow() {
alert("enters");
$('ul.imgslider').each(function () {
$('li', this).css("display", "block");
$('li', this).fadeOut(1000);
});
};
Run Code Online (Sandbox Code Playgroud)
警报已执行,但.each()未执行.如果你这样编码:
$(document).ready(function slideShow() {
alert("enters");
$('ul.imgslider').each(function () {
$('li', this).css("display", "block");
$('li', this).fadeOut(1000);
});
});
Run Code Online (Sandbox Code Playgroud)
一切都在执行.我只是不明白,我想知道为什么会这样?更奇怪的是,在jsfiddle中它确实被执行了,但是当我在本地运行它时却没有.我正在使用jquery-2.0.3.min.js.
php ×4
java ×3
amazon-s3 ×2
azure ×1
bcc ×1
cryptography ×1
cryptojs ×1
email ×1
encryption ×1
gmail-api ×1
java-io ×1
javascript ×1
jquery ×1
kotlin ×1
outputstream ×1
xml ×1
xslt ×1