如何在 java 中生成签名并在 jQuery 中使用它(Cloudinary)?
How to generate signature in java and use it in jQuery (Cloudinary)?
我正在尝试使用 jQuery 和 Java 将图像上传到 Cloudinary。我尝试了 link 中的代码,但没有成功。我在生成签名时遇到错误。
有没有人有生成签名的有效实现示例?那会更有帮助。
将以下代码放入您的 index.jsp:
<html>
<head>
<title></title>
<script src='jquery.min.js' type='text/javascript'></script>
<script src='jquery.ui.widget.js' type='text/javascript'></script>
<script src='jquery.iframe-transport.js' type='text/javascript'></script>
<script src='jquery.fileupload.js' type='text/javascript'></script>
<script src='jquery.cloudinary.js' type='text/javascript'></script>
<script type = "text/javascript">
$.cloudinary.config({ cloud_name: 'sample', api_key: '874837483274837'});
</script>
</head>
<body>
<input name="file" type="file"
class="cloudinary-fileupload" data-cloudinary-field="image_id"
data-form-data="${signedData}" />
</body>
</html>
如果您有一个 Maven 项目,那么将这些依赖项放在您的 pom.xml 中,或者下载它们的 jar 并将它们放在您的 'lib' 文件夹中。
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.4</version>
</dependency>
最后创建一个 Servlet 为:
import org.apache.commons.codec.digest.DigestUtils;
import org.json.JSONObject;
public class SignRequestServlet extends HttpServlet{
public void doGet(HttpServletRequet request, HttpServletResponse response) throws ServletException, IOException{
long unixTime = System.currentTimeMillis() / 1000L;
String unsignedData = ""api_key":"874837483274837","timestamp":"" + unixTime + """;
String unsignedDataForSHA = "timestamp="+unixTime;
String apiSecret = "-----place your api secret here-----";
String unsignedDataSecret = unsignedDataForSHA + apiSecret;
String signedData = unsignedData + ","signature":"" + DigestUtils.shaHex(unsignedDataSecret.getBytes()) + """;
JSONObject jsonObject = new JSONObject("{" + signedData.replaceAll(""", "\"") + "}");
request.setAttribute("signedData", jsonObject.toString());
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
public void doPost(HttpServletRequet request, HttpServletResponse response) throws ServletException, IOException{
doGet(request, response);
}
}
记住:替换 Cloudinary 控制台主页中给出的 api-key、cloud-name 和 api-secret。此外,您可能需要更改 index.jsp.
中 .js 文件的位置
非常感谢 Asim 的回答,同时请注意 Cloudinary 的 Java SDK 已经提供了一个帮助方法来为您生成签名。只需传递参数即可。
请参阅以下内容以供参考:
https://github.com/cloudinary/cloudinary_java/blob/master/cloudinary-core/src/main/java/com/cloudinary/Cloudinary.java#L133
我正在尝试使用 jQuery 和 Java 将图像上传到 Cloudinary。我尝试了 link 中的代码,但没有成功。我在生成签名时遇到错误。 有没有人有生成签名的有效实现示例?那会更有帮助。
将以下代码放入您的 index.jsp:
<html>
<head>
<title></title>
<script src='jquery.min.js' type='text/javascript'></script>
<script src='jquery.ui.widget.js' type='text/javascript'></script>
<script src='jquery.iframe-transport.js' type='text/javascript'></script>
<script src='jquery.fileupload.js' type='text/javascript'></script>
<script src='jquery.cloudinary.js' type='text/javascript'></script>
<script type = "text/javascript">
$.cloudinary.config({ cloud_name: 'sample', api_key: '874837483274837'});
</script>
</head>
<body>
<input name="file" type="file"
class="cloudinary-fileupload" data-cloudinary-field="image_id"
data-form-data="${signedData}" />
</body>
</html>
如果您有一个 Maven 项目,那么将这些依赖项放在您的 pom.xml 中,或者下载它们的 jar 并将它们放在您的 'lib' 文件夹中。
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.4</version>
</dependency>
最后创建一个 Servlet 为:
import org.apache.commons.codec.digest.DigestUtils;
import org.json.JSONObject;
public class SignRequestServlet extends HttpServlet{
public void doGet(HttpServletRequet request, HttpServletResponse response) throws ServletException, IOException{
long unixTime = System.currentTimeMillis() / 1000L;
String unsignedData = ""api_key":"874837483274837","timestamp":"" + unixTime + """;
String unsignedDataForSHA = "timestamp="+unixTime;
String apiSecret = "-----place your api secret here-----";
String unsignedDataSecret = unsignedDataForSHA + apiSecret;
String signedData = unsignedData + ","signature":"" + DigestUtils.shaHex(unsignedDataSecret.getBytes()) + """;
JSONObject jsonObject = new JSONObject("{" + signedData.replaceAll(""", "\"") + "}");
request.setAttribute("signedData", jsonObject.toString());
request.getRequestDispatcher("/index.jsp").forward(request,response);
}
public void doPost(HttpServletRequet request, HttpServletResponse response) throws ServletException, IOException{
doGet(request, response);
}
}
记住:替换 Cloudinary 控制台主页中给出的 api-key、cloud-name 和 api-secret。此外,您可能需要更改 index.jsp.
中 .js 文件的位置非常感谢 Asim 的回答,同时请注意 Cloudinary 的 Java SDK 已经提供了一个帮助方法来为您生成签名。只需传递参数即可。 请参阅以下内容以供参考: https://github.com/cloudinary/cloudinary_java/blob/master/cloudinary-core/src/main/java/com/cloudinary/Cloudinary.java#L133