أنا أستخدم واجهة برمجة تطبيقات Discourse لتحميل صورة. إليك كود جافا الذي أستخدمه لتحميل الملف
import java.net.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.*;
import java.io.*;
public class Upload {
private final static String BASE_URL = "http://localhost:4200";
private final static String API_KEY = "958543d9f5d4df2c2739b8f9156cbd18759d192d435fb4d2c08e5f61fdf3b699";
static String boundary = "WebKitFormBoundary7MA4YWxkTrZu0gW";
private static final String LINE_FEED = "\r\n";
public static void main(String[] args) {
try {
URL url = new URL(BASE_URL + "/uploads.json");
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
httpConn.setRequestMethod("POST");
httpConn.setDoOutput(true);
httpConn.setRequestProperty("api-key", API_KEY);
httpConn.setRequestProperty("api-username", "devarshmavani19");
httpConn.setRequestProperty("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
OutputStream outputStream = new DataOutputStream(System.out);//httpConn.getOutputStream();
PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream));
addFormField("type", "image", writer);
addFormField("synchronous", "true", writer);
addFilePart("file", new File("/home/devarsh/Desktop/small.jpeg"), "", writer, outputStream);
String response = finish(writer, httpConn, outputStream);
System.out.println(response);
}
catch(Exception e ) {e.printStackTrace();}
}
public static void addFormField(String name, String value, PrintWriter writer) {
writer.append("----" + boundary).append(LINE_FEED);
writer.append("Content-Disposition: form-data; name=" + name + "")
.append(LINE_FEED);
writer.append("Content-Type: text/plain; charset=US-ASCII").append(
LINE_FEED);
writer.append(LINE_FEED);
writer.append(value).append(LINE_FEED);
writer.flush();
}
public static void addFilePart(String fieldName, File file, String name, PrintWriter writer, OutputStream outputStream)
throws IOException {
writer.append("----" + boundary).append(LINE_FEED);
writer.append(
"Content-Disposition: form-data; name=" + fieldName
+ "; filename=" + file.getName() + "")
.append(LINE_FEED);
writer.append(
"Content-Type: "
+ URLConnection.guessContentTypeFromName(file.getName()))
.append(LINE_FEED);
writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
writer.append(LINE_FEED);
writer.flush();
FileInputStream inputStream = new FileInputStream(file);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outputStream.flush();
writer.append(LINE_FEED);
writer.flush();
}
public static String finish(PrintWriter writer, HttpURLConnection httpConn, OutputStream stream) throws IOException {
String line = null;
writer.append(LINE_FEED).flush();
writer.append("----" + boundary + "--").append(LINE_FEED);
writer.close();
stream.close();
// checks server's status code first
int status = httpConn.getResponseCode();
if (status == HttpURLConnection.HTTP_OK) {
BufferedReader reader = new BufferedReader(new InputStreamReader(
httpConn.getInputStream()));
while ((line += reader.readLine()) != null) {
}
reader.close();
httpConn.disconnect();
} else {
throw new IOException("PRINTING " + httpConn.getResponseMessage() + " " + httpConn.getResponseCode() + " "); //prints 500 internal server error
}
return line;
}
}
عندما أحاول تحميل صورة باستخدام node js، فإنها تعمل بشكل مثالي. واختبرتها أيضًا باستخدام Postman، وهي تعمل بشكل مثالي أيضًا. ولكن لسبب ما، هناك شيء فاتني في جافا.
سجلات الخادم هنا
Started POST "/uploads.json" for 127.0.0.1 at 2022-06-17 18:23:43 +0530
Processing by UploadsController#create as JSON
Completed 500 Internal Server Error in 0ms (ActiveRecord: 0.0ms | Allocations: 157)
EOFError (EOFError)
lib/auth/default_current_user_provider.rb:127:in `current_user'
lib/current_user.rb:36:in `current_user'
app/controllers/application_controller.rb:976:in `rate_limit_crawlers'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/missing_avatars.rb:23:in `call'
lib/middleware/turbo_dev.rb:34:in `call'
Rendering layout /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/layout.erb
Rendering /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout
Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb (Duration: 0.8ms | Allocations: 382)
Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb (Duration: 0.4ms | Allocations: 186)
Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (Duration: 3.3ms | Allocations: 3201)
Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (Duration: 2.1ms | Allocations: 2119)
Rendering /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (Duration: 1.0ms | Allocations: 459)
Rendered /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (Duration: 18.1ms | Allocations: 9875)
Rendered layout /home/devarsh/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/actionpack-7.0.3/lib/action_dispatch/middleware/templates/rescues/layout.erb (Duration: 20.4ms | Allocations: 10943)
يرجى إرشادي كيف يمكنني جعله يعمل باستخدام حزمة java.net
أي مساعدة ستكون موضع تقدير
تعديل: أنا أيضًا أرفق كود node js الذي نجح
var fs = require("fs");
var request = require("request");
fs.readFile("/home/devarsh/Desktop/small2.jpeg", function(e, data) {
console.log(data, e)
var options = { method: 'POST',
url: 'http://localhost:4200/uploads.json',
headers:
{
'api-username': 'tester',
'api-key': '3772adba123b1db43f4d3644382b97a5ba9b6cdfdb796e25341dc796c402638e',
'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW',
},
formData:
{ type: 'image',
synchronous: 'true',
file:
{ value: data,
options: { filename: 'small2.jpeg', contentType: "image/png", } } } };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body, response.body, error);
});
})